Exemple de transformation d'une relation d'héritage
Exemple :

Remarque : Type d'héritage
L'héritage n'est pas complet, puisque l'on observe que les thèses et les livres ont des attributs qui ne sont pas communs (la discipline pour la thèse et l'éditeur pour le livre). Mais l'on peut considérer qu'il est presque complet, car il n'y a qu'un attribut par classe fille de différence et pas d'association associée aux classes filles.
La classe mère est abstraite, on ne gère que des livre ou des thèses, pas d'autres documents ; il n'y a aucune clé candidate identifiée.
La meilleure solution est ici un héritage par les classes filles ; un héritage par la classe mère est le second choix (contraintes simples) ; en revanche l'héritage par référence est un mauvais choix (contraintes complexes).
Observons les avantages et inconvénients de chacune des trois solutions.
Héritage absorbé par les classes filles
These(#id:int, titre:text, discipline:text, auteur:text)
Livre(#id:int, titre:text, editeur:text, auteur:text)
Héritage représenté par une référence
Document(#id:int, titre:text, auteur:text) avec titre et auteur NOT NULL
These(#id=>Document, discipline:text)
Livre(#id=>Document, editeur:text)
Contraites compliquées :
- Intersection (PROJECTION(These, id), Projection(Livre, id)) = {}
- Projection(Document,id) = Union (Projection(These,id), Projection(Livre,id))
Vues :
vThese = JointureNaturelle (Document, These)
vLivre = JointureNaturelle (Document, Livre)
Héritage absorbé par la classe mère
Document(#id:int, titre:text, discipline:text, editeur:text, auteur:text, type:{These|Livre})
Contraintes simples :
- (discipline NOT NULL AND type=These) OR (editeur NOT NULL AND type=Livre)
- NOT (discipline NOT NULL AND type=Livre)
- NOT (editeur NOT NULL AND type=These)
Vues :
vThese = Projection (Restriction (Document, type=These), id, titre, discipline, auteur)
vLivre = Projection (Restriction (Document, type=Livre), id, titre, editeur, auteur)