Bonjour,
Je ne suis pas sur d’être sur le bon forum car ma question n'est pas spécifique a MySQL.
J'utilise Hibernate pour la persistance objet-relationnel. Je sais que je parle de classes mais j'en ai besoin pour introduire le problème.
J'ai une classe A abstraite possédant les attributs a,b,c,d et une classe B qui hérite de A avec les attributs e,f,g (et ceux de A par héritage bien sur).
La classe abstraite A n'a aucun attribut (ou groupe d'attributs) pouvant l'identifier. Les instances de B sont identifiées a partir de l'attribut 'a' (de la classe A) et de l'attribut 'e' (de la classe B).
Comment représenter cet héritage dans le modèle relationnel? (laissons de cote Hibernate, je parle dans le cas ou je ferais le mapping manuellement)
Si je définis une table par classe (y compris la classe abstraite A), je me retrouve avec une table A et une table B (possédant une clé étrangère vers A). Le problème est qu'aucun des attributs (ou groupe d'attributs) de A ne peuvent identifier des lignes de A donc je me retrouve avec une table sans clé primaire, et c'est interdit. J'ai décidé donc d'ajouter une clé "artificiel"(je crois que ça s'appelle surrogate) qui n'a pas de représentation. Le problème est que le groupe d'attributs 'a' et 'e' (de A et B respectivement) est une clé candidate, il y a donc une contrainte d’unicité nécessaire; or je ne vois pas comment créer une contrainte d’unicité sur des attributs appartenant a des tables différentes.
Si vous aviez une solution en changeant l'architecture ou autre.
Merci d'avance
Partager