Transformation de la relation d'héritage par la classe mère

Méthode

  • Seule la classe mère est représentée par une relation (ses classes filles ne sont pas représentées par des relations).

  • Tous les attributs de chaque classe fille sont réintégrés au niveau de la classe mère.

  • La clé primaire de la classe mère est utilisée pour identifier la relation.

  • Un attribut supplémentaire de discrimination t (pour "type"), est ajouté à la classe mère, afin de distinguer les tuples.

    Cet attribut est de type énumération et a pour valeurs possibles les noms de la classe mère ou des différents classes filles.

Héritage

Classe1(#a,b,c,d,e,f,t:{1,2,3}) avec c UNIQUE et e UNIQUE

Remarque

Si une classe fille a une clé primaire propre, cette clé sera réintégrée à la classe mère, au même titre qu'un autre attribut, mais elle n'officiera pas en tant que clé candidate car elle pourra contenir des valeurs nulles (elle sera néanmoins unique).

ConseilClasse mère non abstraite

Cette solution est particulièrement adaptée lorsque la classe mère n'est pas abstraite, car cela en autorise l'instanciation naturellement. Lorsque la classe mère est abstraite il est moins naturel de disposer d'une table associée à cette classe.

ConseilHéritage complet

Cette solution est optimum dans le cas d'un héritage complet, c'est à dire si les classes filles ne définissent pas d'attributs autre que ceux hérités. Dans le cas contraire cela engendre des valeurs null.

En pratique l'héritage complet est rare, mais nombre d'héritages le sont presque et pourront alors être raisonnablement gérés selon cette approche, a fortiori si la classe mère n'est pas abstraite.

ComplémentHéritage non exclusif

afin de gérer l'héritage non exclusif (un objet peut être de plusieurs classes filles à la fois), le domaine de l'attribut de discrimination, peut être étendu à des combinaisons de noms des différentes classes filles.

Classe1(#a,b,c,d,e,f,t:{1,2,3,23})

ComplémentReprésentation de la discrimination par des booléens

Si l'héritage concerne un nombre élevé de classes filles et qu'il est principalement non exclusif alors le domaine de l'attribut de discrimination peut impliquer une combinatoire importante de valeurs. Pour contourner cette lourdeur il est possible d'utiliser, en remplacement, un attribut de domaine booléen pour chaque classe fille spécifiant si un tuple est un objet de cette classe.

Classe1(#a,b,c,d,e,f,t:{1,2,3})

équivaut à :

Classe1(#a,b,c,d,e,f,t2:boolean:,t3:boolean)

Contraintes :

  • avec t2 X t3 si l'héritage est exclusif

  • avec t2 XOR t3 si l'héritage est exclusif et la classe mère abstraite