Vendredi 20 février 2009
A63 Persistance de données
M. LACHICHE

====== Cours ======

===== Shadow information =====

Toplink permet d'épargner toute l'instrumentation des attributs d'un objet pour renseigner son état d'insertion, de mise à jour, etc dans la base de données.

===== Mapping de l'héritage =====

Les BDD relationnel ne prennent pas en compte l'héritage => pas une raison pour éviter l'héritage.

Classe abstraite = classe qui ne peut pas avoir d'instance (abstract en java)

Personne est une classe abstraite.

Pour //mapper// l'héritage on a 4 solutions :
  * Tout mettre dans une table
  * Faire une table par classe concrète
  * Faire une table par classe, y compris les abstraites
  * Représenter les classes par une structure de classe générique

Les 3 premières solutions sont gérées par TopLink.

====== Exercice ======

On a une couche métier avec des Oiseaux, des Lézards, des Dragons.

Le dragon hérite du lézard et de l'oiseau.

L'oiseau possède les attributs suivants :
  * vitesseMaximal
  * tailleAiles

Le lézard possède les attributs suivants : 
  * nombreGriffes
  * nombreCouleurs

Le dragon possède les attributs suivants : 
  * nom
  * puissanceFeu

Intitulé de l'exercice : Adapter ce modèle métier aux 4 modèles de base de données expliqués dans le cours.

===== Corrigé =====

==== Solution 1 ====

On doit créer une table : ANIMAL.

Attributs :
  * identifiant
  * typeAnimal
  * nombreGriffe
  * nombreCouleur
  * tailleAiles
  * vitesseMaximale
  * nom
  * puissanceFeu

==== Solution 2 ====

Trois tables : 
  * Oiseau
  * Lézard
  * Dragon

Attributs pour Oiseau : 
  * id
  * vitesseMaximale
  * tailleAiles

Attributs pour Lézards : 
  * identifiant
  * nombreGriffes
  * nombreCouleurs

Attributs pour Dragons : 
  * identifiant
  * vitesseMaximal
  * tailleAiles
  * nombreGriffes
  * nombreCouleurs
  * puissanceFeu
  * nom

==== Solution 3 ====

Trois tables :
  * Oiseau
  * Lézard
  * Dragon

Avec chacune leur propres attributs (pas de redondance d'attributs dans Dragon.

Plusieurs solutions : 
  * soit on met idAnimal partagé par tout le monde, comme avant
  * soit on adapte : on met idOiseau et idLézard en clé primaire pour dragon, et idOiseau et idLézard dans leur table respective

==== Solution 4 ====

On reprend le même modèle que dans le cours.

On remplit alors les classes, voilà tout.

----

Séance 3

====== Mapping des associations ======

Dans les SGBD, relation voulait dire association des domaines de la table.

Cependant, cela est actuellement utilisé pour des relations entres les tables.

Clés artificielles pour être indépendant du domaine d'application : si on a besoin de deux objets identiques mais différents pour nous (exemple : code barre des produits)

====== Mapping des propriétés de classe ======

Ne peuvent pas être géré comme des attributs ordinaires car sont là pour UNE classe pas pour ses instances si on veut.


