Le modèle relationnel n’a pas été pensé pour représenter des relations d’héritage. Il est certes possible de les modéliser, mais cela nécessitera un peu de réflexion de votre part.
Il y a trois manières différentes de traduire une relation d’héritage :
L’héritage par référence ;
L’héritage par classe mère ;
L’héritage par classes filles.
Chacune de ces trois méthodes possède ses avantages et inconvénients, que nous allons détailler ici.
La méthode la plus fréquente est la transformation de l’héritage par référence, car elle est bien adaptée à la majeure partie des cas de figure.
Transformez votre héritage par référence
Avec cette méthode, il vous faut créer une table pour la classe mère, et une table par classe fille. Des clés étrangères dans les tables des classes filles permettront de référencer la table de la classe mère.
La clé primaire de chaque table fille doit être la même clé primaire que la table mère. Chacune des clés primaires des tables filles est donc également une clé étrangère qui référence la table mère.
C’est à-dire ?
Dans notre cas, la clé primaire deoeuvre
est(titre, societe_prod)
. Ces deux attributs devront donc être ajoutés aux tables filles (telefilm
, long_metrage
,serie_web
, serie_tv
etserie
), et ils seront à la fois clé étrangère versoeuvre
, et à la fois clé primaire de chaque table fille :
![Cas de l’héritage par référence](https://user.oc-static.com/upload/2021/10/16/163438993874_image50.png)
On pourrait aussi considérer aussi que saison
fait partie de la clé primaire deserie
, mais pour ne pas allonger le cours, je ne traiterai pas ce cas ici. ;)
Transformez votre héritage par la classe mère
Avec cette méthode, il n’y a qu’une seule table : celle qui correspond à la classe mère.
Elle nécessite donc de regrouper toutes les informations des classes filles dans cette unique table. Tous les attributs des classes filles seront donc réintégrés à la classe mère. En plus, un attribut supplémentaire sera ajouté (appelé attribut de discrimination), qui indique pour chaque ligne à quelle classe fille cette ligne correspond.
En reprenant votre UML, vous verrez que parmi toutes les classes filles de oeuvre
, il n’y a qu’un seul attribut : saison
. Vous allez donc l’ajouter à la table oeuvre
. Remarquez que cet attribut aura la valeur NULL
lorsque l’œuvre en question ne sera pas une série.
Aussi, il vous faut ajouter l’attribut de discrimination qui permet de savoir si une œuvre est un téléfilm, un long-métrage, etc. Appelez cet attribut type_de_tournage
:
![La table](https://user.oc-static.com/upload/2021/10/16/16343905638307_image36.png)
Transformez votre héritage par la classe fille
Avec cette méthode, la classe mère ne donne pas lieu à une table. À l’inverse, chaque classe fille est traduite par une table, et chacune de ces tables doit alors reprendre les attributs de la classe mère.
De plus, la clé primaire de chaque table fille doit être la clé primaire de la classe mère. Dans votre cas, chaque table fille aurait donc eu comme clé primaire(titre, societe_prod)
:
![Héritage par classes filles : les classes mères](https://user.oc-static.com/upload/2021/11/08/16363709755505_16343908155606_image33.png)
Autres alternatives
Le modèle relationnel n’ayant pas été conçu pour gérer efficacement l’héritage, il a été créé une amélioration du modèle relationnel : le modèle objet-relationnel. Il reprend les concepts du modèle relationnel, mais y ajoute quelques notions empruntées à l’orienté objet (qui se modélise par le diagramme de classes UML), comme l’héritage.
À vous de jouer
Maintenant que vous avez sous la main toutes les règles de traduction de l’UML vers le relationnel, je vous laisse traduire entièrement votre diagramme UML en modèle relationnel !
Voici la réponse :
![Réponse à l'exercice](https://user.oc-static.com/upload/2021/10/16/16343909911735_image51.png)
En résumé
Une relation d'héritage peut être traduite de 3 manières différentes :
par référence ;
par classe mère ;
par classes filles.
Bravo, vous savez maintenant traduire entièrement n’importe quel diagramme UML en un schéma relationnel. Mais au fait, est-ce que votre modélisation minimise la redondance ? C’est ce que nous allons voir dans la dernière partie.