Contraintes de l'héritage par la classe mère avec classe mère abstraite
Méthode :
Si la classe mère est abstraite :
sa valeur est ôtée de l'attribut de discrimination ;
une contrainte supplémentaire doit vérifier que soit c soit e est obligatoirement valué (ou les deux).
R1(#a,b,c,d,e,f,t:{2,3})
Contraintes :
c UNIQUE et e UNIQUE
AND (c NOT NULL OR e NOT NULL)
AND t NOT NULL
Exemple : Héritage absorbé par la classe mère
Soit la classe A avec la clé K et les attributs A1 et A2. Soit la classe B, classe fille de A avec les attributs B1 et B2. Soit la classe C, classe fille de A avec les attributs C1 et C2.
Le modèle relationnel correspondant selon cette transformation est :
A (#K, A1, A2, B1, B2, C1, C2, T:{'B','C'})
Si l'on pose que A n'est pas abstraite, alors un tuple sera un A s'il a la valeur null pour sa propriété D. Si l'on pose que A est abstraite, on ajoutera la contrainte NOT NULL à la propriété T. On peut aussi ajouter 'A' aux valeurs possible de T.
Complément : Héritage exclusif
Si l'héritage est exclusif, que la classe mère soit abstraite ou non, il faudrait vérifier par des contraintes que l'attribut de discrimination T et les attributs valués sont en correspondance, afin d'empêcher toute incohérence :
(T=2 AND c)
(T=3 AND e)
NOT (c AND e)
NOT (c AND f)
...