Cas problématiques
Attention : Héritage par les classes filles avec association M:N ou 1:N sur la classe mère
On traite le cas x=1 (1:N) avec Classe1 abstraite (mais le cas M:N et/ou classe non abstraite ne change rien au problème) :
Classe2(#a,b,c,d) avec c KEY
Classe3(#a,b,e,f) avec e KEY
Classe4(#g,h,fka=>Classe2, fkb=>Classe3)
Contrainte : fka OR fkb
La seule solution, peu élégante, consiste à ajouter autant de clés étrangères que de classes filles et à gérer le fait que ces clés ne peuvent pas être co-valuées.
Attention : Héritage non complet par la classe mère (association M:N ou 1:N sur une classe fille)
On traite le cas x=1 (1:N) (mais le cas M:N ne change rien au problème) :
Classe1(#a,b,c,d,e,f,t:{1,2,3})
Classe4(#g,h,fka=>Classe1)
Contraintes : Classe4.fka ne référence que des enregistrements tels que Classe1.t=3
On est obligé d'ajouter une contrainte pour limiter la portée de la clé étrangère de Classe4 ; on est sorti ici de ce que l'on sait faire de façon simple en relationnel.
Attention : Héritage non complet par la classe mère (association entre classes filles)
Classe1(#a,b,c,d,e,f,fka=>Classe1,t:{1,2,3})
Contraintes : fka ne référence que des enregistrements tels que t=2 ; si fka alors t=3
Dans ce cas la solution est encore plus problématique, elle permettra en l'état des associations entre Classe1 et Classe3, et même entre Classe3 et Classe3, on est très loin de la modélisation conceptuelle initiale.
Conseil :
Afin de déterminer si un héritage est presque complet ou non, il faut donc surtout regarder les associations, ce sont elles qui poseront le plus de problème un fois en relationnel (à cause de l'intégrité référentielle).
Complément : Héritage non exclusif
L'héritage non exclusif ne doit pas être traité par les classes filles, sous peine d'introduire de la redondance.
Complément : Héritage multiple
L'héritage multiple sera généralement mieux géré avec un héritage par référence.