Bonjour à tous,
J'ai lu cette page http://sqlpro.developpez.com/cours/m...n/heritage/#L5 , mais de nombreux doutes subsistent dans mon esprit.
J'ai une application en c#, qui exploite une collection d'objets héritant tous d'une classe mère (nommée 'Element'). J'ai ainsi des 'Titres', des 'Images', des 'Paragraphes' qui sont tous des dérivés d'Element, regroupés au sein d'un objet nommé 'ElementCollection'.
Je dois désormais stocker ma collection d'élément en base de données, j'ai gribouillé donc le schéma suivant :
que j'ai transformé en tables de la sorte :
- Element ( id_element )
- Titre ( id_element# , libelle )
- Paragraphe (id_element# , contenu )
- Asso_Element_Document ( id_document#, id_element#)
Quand à partir de mon application, j'appelle l'enregistrement de chaque objet dérivé, je sais quel est le type de la spécialisation, donc, je sais exactement dans quelle table enregistrer mes informations.
Mais c'est l'étape inverse qui me pose véritablement problème.
Je dispose d'un identifiant pour le document, je veux récuperer l'ensemble des éléments liés à ce document, comment dois je faire ?
Je sais récupérer tous les identifiants : SELECT id_element FROM Asso_Element_Document WHERE id_document = %ID%
Mais pour la suite ? Dois je parcourir les tables filles avec mon application à la recherche de l'identifiant unique obtenu ci-dessus ?
Est ce "normalisé" de mettre dans la table Element, une colonne supplémentaire pour indiquer quelle est la spécialisation de l'élément ?
En espérant être suffisament clair et avoir quelques éclaircissements de votre part, merci d'avance !
Partager