Académique Documents
Professionnel Documents
Culture Documents
Chapitre 3 Identifiez Les Éléments Clés Du Modèle Relationnel
Chapitre 3 Identifiez Les Éléments Clés Du Modèle Relationnel
Dans cette nouvelle partie, nous allons voir la seconde étape, le modèle logique. Pour les
bases de données relationnelles, le niveau logique utilise la modélisation relationnelle. Votre
modèle relationnel découlera de votre diagramme UML, et quand vous l’aurez défini, il sera
ensuite très simple de créer votre base de données finale !
Le mot « relation » peut prêter à confusion. En effet, ce mot fait penser au concept
d’« association » que nous avons vu lors des chapitres précédents. En plus, dire qu’un tableau
est une « relation », ce n’est pas très intuitif. Pour ne pas vous emmêler les pinceaux, nous
n’emploierons pas le mot Relation, mais plutôt Table.
Tout au long des chapitres de cette troisième partie, vous allez traduire votre diagramme
UML en un modèle relationnel.
La première étape de cette traduction est aussi la plus simple : nous allons créer une table pour
chaque classe du diagramme UML. Nous laissons pour le moment de côté les classes héritées
( serie_tv, telefilm, etc), que vous verrez plus tard.
Voici donc les tables que nous avons actuellement :
œuvre ;
lieu ;
tournage ;
societe_de_production ;
realisateur_ice.
Bonne nouvelle ! Le concept d’attribut existe également dans le modèle relationnel, et il a la
même signification qu’en UML. Retenez juste que attribut est synonyme de colonne.
Ainsi, nos cinq tables possèdent les même attributs que leurs classes correspondantes en
UML :
La représentation textuelle
Notre table lieu, qui possède quatre attributs, s’écrit de cette manière :
lieu (localisation_de_la_scene:Texte, code_postal:Numérique, longitude:Numérique, latitude:Numérique)
La représentation graphique
Elle est très similaire à l’UML car elle représente les tables par des rectangles divisés en trois
parties, mais ces trois parties sont remplies différemment qu’en UML. Attention donc à ne pas
les confondre !
Par défaut, les attributs sont notés dans la troisième partie (au lieu de la deuxième en UML).
Terme Synonymes
Table Relation
Ligne Tuple, enregistrement, vecteur, n-uplet, (instance)
Colonne Attribut
Maintenant que vous avez posé les bases de votre modèle avec vos 5 tables, il est temps de
l’approfondir en déterminant les clés primaires de vos tables : voyons cela au chapitre
suivant !
Déterminez vos clés primaires
Cette vidéo couvre ce chapitre ainsi que le suivant.
Jusqu’à maintenant, vous avez vu que les classes UML se traduisent en tables. Ici, nous allons
plonger plus en détail au cœur des tables pour analyser ce qui les compose : les lignes et les
colonnes.
Pour commencer, vous verrez comment le modèle relationnel permet d’identifier une ligne
d’une table.
Si chaque information ne doit être présente qu’une seule fois, cela implique que dans une
table donnée, par exempleoeuvre, il ne doit pas y avoir deux lignes décrivant une même œuvre.
Ainsi,oeuvrecontiendra exactement autant de lignes qu’il y a d'œuvres dont les lieux de tour-
nage ont été enregistrés dans notre fichier CSV.
Mais cela pose une question fondamentale : comment nous assurer que deux lignes deoeuvre
font bien référence à 2 œuvres différentes ?
Autrement dit, comment différencier deux lignes ?
Cette question fondamentale, c’est celle de l’identité. Dans le monde, chaque personne est
unique. Ce qui garantit votre unicité, c’est votre identité. En effet, deux personnes ne peuvent
pas avoir la même identité, et une personne ne peut avoir deux identités différentes (à part
dans le monde des espions et espionnes, mais ça c’est une autre histoire).
D’ailleurs, la plupart des SGBDR n’acceptent pas que deux lignes d’une table soient iden-
tiques (c’est-à-dire que chacun de leurs attributs aient les mêmes valeurs).
L’identité d’une ligne est appelée clé primaire.
Ça y est, vous êtes prêt à déterminer les clés primaires de votre modèle. Je vous remets ici
l’état actuel du modèle :
Représentation graphique du modèle relationnel à l'état actuel
Tablessociete_de_productionetrealisateur_ice
Pour les tablessociete_de_productionetrealisateur_ice, il n’y a pas beaucoup de choix : nous pren-
drons l’attributnompour chacune de ces deux tables. Bien sûr, cela suppose qu’il n’y ait pas
deux sociétés de production ayant le même nom, ni deux réalisateurs/réalisatrices ayant le
même nom. C’est très peu probable, donc on peut considérer quenomest une bonne clé pri-
maire pour ces 2 tables.
Tablelieu
Pour la tablelieu, c’est moins évident. Il pourrait y avoir deux clé primaires possibles :
1. Le groupe(localisation_de_la_scene, code_postal).
2. Le groupe(latitude, longitude).
Pour la première solution, il faut supposer quelocalisation_de_la_scenecontienne bien au moins le
nom de la rue (de la voie) ainsi que la commune. Dans ce cas, la contrainte d’unicité est res-
pectée car il n’existe pas deux noms de voie identiques pour une même commune. Et même
s’il existe en France plusieurs communes ayant le même nom, le code postal permet de lever
cette ambiguïté. Avec cette clé primaire, on peut donc identifier dans quelle rue est tournée
une œuvre donnée.
Mais cette première solution a des inconvénients. Tout d’abord, l’attri-
but localisation_de_la_scene est de mauvaise qualité : l’utilisateur qui entre une adresse n’est pas
contraint d'indiquer cette adresse de manière normalisée : rien ne l'oblige à indiquer le nom de
la commune. Il pourrait même indiquer le code postal, alors que celui-ci est censé être déjà
présent dans l’attribut code_postal: bonjour la redondance ! De plus, l’utilisateur peut écrire une
même adresse de deux manières différentes, par exemple « 2, boulevard Joffre» et « 2 Bd
Joffre » : cela rend difficile la détection de doublons !
Regardez dans le fichier aux lignes 2016-980et 2019-608 vous avez une adresse avec le code
postal redondant, et l’autre n’indique pas la ville : elles sont de plus écrites différemment
(l’une en majuscules, l’autre avec un accent) ! C’est le bazar.
Quant à la solution 2, elle pose un autre problème : celui de la précision. Faut-il considérer le
couple latitude-longitude (48.87512, 2.348979) comme étant différent du couple (48.87506,
2.348963), alors que ces deux endroits sont séparés de 3 mètres, se trouvent dans la même
rue et désignent donc le même lieu de tournage ?
Comme vous l’avez vu, certains types d’attributs sont moins propices à appartenir à une clé
primaire. Ainsi, on préférera les nombres entiers aux nombres décimaux (pour une question
de précision), et les chaînes de caractères courtes et sans confusion possible (différentes
orthographes, etc.).
Il peut exister plusieurs solutions pour la clé primaire : c’est le cas pourlieu. Plus formelle-
ment, on dit que les différentes options sont des clés candidates, et que l’option finalement
retenue est la clé primaire. Pour la tablelieu, nous choisirons arbitrairement le groupe(localisa-
tion_de_la_scene, code_postal)comme clé primaire.
Tablesoeuvreet tournage
Pour les tables oeuvreettournage , il est impossible, pour le moment, de trouver une clé primaire.
En effet, dans le chapitre où nous parlions de la composition en UML, nous avions dit ce-
la : « Il existe parfois des films différents ayant le même nom (exemple : au moins quatre
films portent le titre Home). Ainsi, pour identifier un film de manière certaine, on a besoin de
son titre mais aussi du nom de sa société de production, ce qui prouve le lien de dépendance
entre ces deux classes. »
Problème : la table oeuvrene contient pas, pour l’instant, d’attribut donnant le nom de la socié-
té de production. Sans cet attribut, on ne peut pas avoir de clé primaire.
Pour la table tournage, nous n’avons que deux attributs : la date de début et la date de fin.
Problème : deux tournages (de deux films différents, sur deux lieux différents) peuvent avoir
débuté et s’être terminés exactement aux mêmes dates. Pour vous en convaincre, vous pouvez
vérifier aux lignes 2016-87 et 2016-189 . Il n’y a donc pas d’unicité possible.
Nous laissons donc ces 2 tables en suspens, nous trouverons leurs clés primaires plus tard. 😉
Un point sur les notations et représentations graphiques
Graphiquement, il est courant de représenter les attributs qui constituent la clé primaire dans
la partie centrale du rectangle qui représente la table, et tous les autres attributs sont ins-
crits dans la partie basse. Mais il peut arriver que vous rencontriez d’autres représentations,
ailleurs que dans ce cours. Par exemple avec la clé primaire en gras ou soulignée.
Aussi, on peut indiquer les attributs de la clé primaire par l’abréviation « PK », mise pour
« Primary Key ».
Représentation graphique du modèle relationnel avec la présence des clés primaires notées
[PK]
Créez des clés primaires artificielles
Parmi les attributs d’une table, il est parfois impossible de trouver une clé primaire. Dans
d’autres cas, la clé primaire est trop complexe (trop d’attributs, par exemple). Dans ce cas, il
est possible de créer une clé artificielle.
Une clé artificielle est un attribut que l'on ajoute à la table. Cet attribut n'a pas de réelle si-
gnification dans le domaine que l'on modélise, mais sa seule fonction est d'identifier de ma-
nière unique les lignes de la relation. C’est donc un identifiant.
Exemple : le numéro de Sécurité sociale ou le numéro de carte d’identité sont des clés artifi-
cielles permettant d'identifier les personnes de nationalité française.
Quand vous dessinez votre MLD, vous pouvez être tenté de créer un identifiant pour chaque
table ; cependant il est préférable de ne faire cela que pour les cas particuliers.
Par exemple, prenez cet extrait de votre fichier CSV :
Extrait de lignes du fichier CSV
Si vous le transformez pour le faire coller à votre modèle relationnel (donc avec deux tables
oeuvreetsociete_de_production, avec une clé étrangèresociete_prod) en y ajoutant des clés artifi-
cielles, vous pourriez être tenté de simplement découper le fichier en deux :
La bonne solution
Par contre, quand on passe au MPD (la troisième étape de la modélisation), il est fréquent
d’utiliser des clés artificielles systématiquement, car :
Il y a toujours un risque qu’une clé primaire non artificielle perde la propriété d’unici-
té (exemple : si une même société de production produit deux films ayant le même
nom).
Si la valeur d’une clé non artificielle est modifiée (si par exemple une société de pro-
duction change de nom), il faut modifier toutes les clés étrangères qui la référencent.
En résumé
La clé primaire d’une table est un groupe de colonnes minimum permettant d'identifier
une ligne d'une table.
Une clé primaire a donc forcément une contrainte d'unicité.
Dans certains cas, il est impossible de trouver une clé primaire parmi les colonnes pré-
sentes. Dans d’autres cas, la clé primaire est trop complexe. On crée alors une clé pri-
maire artificielle.
Dans le MLD, l'usage de clé primaire artificielle est à réserver pour les cas particu-
liers, et il faut prendre certaines précautions.
Vous avez identifié vos clés primaires, c’est bien. Mais vos tables sont encore séparées les
unes des autres. Dans le chapitre suivant, vous verrez comment les relier entre elles.
Découvrez l’utilité des clés étrangères
La modélisation relationnelle permet cela, grâce au concept de clé étrangère.
Une clé étrangère, c’est un attribut (ou groupe d'attributs) d’une table qui fait référence à la
clé primaire d’une autre table, afin de modéliser le lien entre les lignes de ces deux tables.
Voici ce que cela donnerait si vous modélisiez le lien entre deux tables,livreetpersonne :
Représentation en tableau des tables « lieu » et « tournage », avec les clés primaires [PK] et
étrangères [FK] spécifiées
Cardinalités minimales et valeurs nulles
Qu’est-ce qu’une valeur nulle ?
Le modèle relationnel met à disposition une valeur bien pratique : la valeur nulle, notéenull.
Cette valeur est équivalente à une case vide dans un tableau, lorsqu'une information est
manquante ou inexistante.
Par exemple, si une tablePersonnecontient les attributsdate_naissanceetdate_deces , alors on pour-
rait contraindre l’attributdate_naissanceà n’être jamais null si on veut que la date de naissance
soit obligatoirement renseignée pour chaque personne. C’est la contrainte de non-nullité. Par
contre, la date de décès sera nulle pour les individus étant encore en vie.
La valeurnull est différente de la valeur 0, ou de la chaîne de caractères vide"". Contrairement
à0 ou à"", nullindique l’absence d’information : soit parce que l’information n’a pas pu être
récoltée, soit parce que l’information n’existe tout simplement pas.
Les attributs qui composent une clé primaire ne peuvent jamais être nuls, car ils servent
à identifier les lignes de la table. Une ligne sans identité (ou avec une identité incomplète),
c’est interdit !
Comprenez l’utilité des valeurs nulles dans les clés étrangères en fonction de la cardina-
lité minimale
Quand on transforme des associations UML en clés étrangères, la contrainte de non-nullité est
utile lorsque la cardinalité minimale est 1 (et non pas 0).
Vous verrez, la traduction est automatique : il n’y a qu’à appliquer quelques règles, et le tour
est joué !
Dans ce chapitre, ne cherchez pas à tout retenir par cœur : cherchez d’abord à comprendre la
logique des traductions UML-relationnel. Voyez-le plutôt comme un « dictionnaire de traduc-
tion » dans lequel vous viendrez piocher les cas qui vous seront utiles au moment où vous en
aurez besoin.
L’association un-à-plusieurs
Reprenez votre diagramme UML, et regardez l’association entre Oeuvreet SocieteDeProduction.
Elle est de type un-à-plusieurs. Certes, c’est aussi une composition. Mais une composition est
un cas particulier de un-à-plusieurs. Si vous le voulez bien, oublions donc l’aspect composi-
tion pour le moment, pour nous concentrer sur l’aspect un-à-plusieurs :
tée ci-dessus, mais elle a une particularité en plus que je vous explique un peu plus bas. 😉
L’association plusieurs-à-plusieurs
Prenez maintenant l’association oeuvre - realisateur_ice, qui est de type plusieurs-à-plusieurs.
Si vous essayez de mettre une clé étrangère dansoeuvreréférençant la clé primaire de realisa-
teur_ice, alors vous verrez qu’une œuvre ne peut avoir qu’un réalisateur : ce n’est pas ce que
vous voulez. Si inversement vous mettez une clé étrangère dans realisateur_ice, alors vous ne
pourrez avoir qu’une œuvre par réalisateur.
Pour mieux visualiser ce problème, je vous conseille cette très bonne vidéo sur Openclass-
rooms.
La solution est d’ajouter une table en plus. Cette table contiendra deux clés étrangères :
l’une référençant oeuvre , et l’autre référençant realisateur_ice :
Vous voyez ici qu’une œuvre peut avoir plusieurs réalisateurs, et qu’un réalisateur peut avoir
réalisé plusieurs œuvres.
La clé primaire de cette nouvelle table sera composée des deux clés étrangères :
Représentation graphique des tables avec leurs clés primaires et étrangères
Comme assoc_oeuvre_real et realisateur_ice sont liées par une clé étrangère ( real), et que cette clé
étrangère fait également partie de la clé primaire de assoc_real_oeuvre, on lie les deux tables
par un trait plein (et non pas en pointillés comme précédemment).
L’association un-à-un
Pour une association un-à-un entre une tableA et une tableB, on utilise aussi une clé étrangère.
La clé étrangère est placée dans A et elle référence la clé primaire deB .
L’association un-à-un des tables « cinema » et « adresse »
Mais, c’est la même chose que pour l’association un-à-plusieurs, non ?
Oui, mais il y a un petit détail en plus. 😉 Selon le graphique ci-dessus, un cinéma ne peut avoir
qu’une adresse, mais deux cinémas peuvent avoir la même adresse : ce n’est pas ce que l’on
veut.
Pour spécifier qu’une adresse ne peut accueillir qu’un seul cinéma, il faut ajouter
une contrainte d’unicité sur l’attribut adresse . Ainsi, la colonne adresse ne pourra pas contenir
deux fois la même valeur. Ce qui signifie que adresse ne pourra pas contenir deux fois la même
référence vers une adresse donnée. Autrement dit, une adresse ne pourra pas accueillir plus
d’un cinéma.
Il faut donc également spécifier au SGBDR une contrainte d’unicité sur la clé étrangère.
En résumé
Une association un-à-plusieurs se traduit en ajoutant une clé étrangère dans la table qui
est du côté « plusieurs ». Cette clé étrangère référence la clé primaire de la table qui
est du côté « un ».
Une association plusieurs-à-plusieurs se traduit en ajoutant une nouvelle table. La clé
primaire de cette nouvelle table sera composée des deux clés étrangères référençant les
deux tables à associer.
Pour une association un-à-un entre une tableAet une table B, on utilise aussi une clé
étrangère. La clé étrangère est placée dans Aet elle référence la clé primaire de B.
La première étape de traduction de votre diagramme UML en modèle relationnel est termi-
née. Bravo ! Vous avez transformé les associations de votre diagramme de classe UML.
Voyons, au chapitre suivant comme transformer vos compositions et vos classes d'associa-
tions.
Mais vous le savez désormais, ce qui différencie une composition d’une simple association
un-à-plusieurs, c’est que le composant ne peut exister sans son composite. Ainsi, on identifie
un composant à partir de son composite. C’est-à-dire que la clé primaire du composant
inclut/comprend obligatoirement le composite.
C’est le cas entre une œuvre et sa société de production. Car comme vous l’avez vu précé-
demment, une œuvre se définit par son titre ET par la société qui l’a produite (car il arrive que
deux œuvres aient le même titre).
Maintenant que nous avons ajouté une clé étrangèresociete_proddans oeuvre , qui référence so-
ciete_de_production, il est donc possible d’identifier chaque œuvre par son titre et sa société.
Vous avez donc trouvé la dernière des clés primaires de votre modèle relationnel : celle de la
Jusqu’à maintenant, notre table tournage n’avait que deux attributs. Seules, ces deux dates ne
veulent rien dire : il faut pouvoir les lier à l’œuvre et au lieu correspondants. Vous vous en
doutez peut-être : il va falloir utiliser des clés étrangères !
Classe d’association sur une relation plusieurs-à-plusieurs
La relation entreoeuvre et lieuest de type plusieurs-à-plusieurs.
Vous savez déjà comment traduire une telle relation : en ajoutant une nouvelle table qui
contient deux clés étrangères référençant les deux tables de part et d’autre de l’association.
Voici ce que cela donnerait :
Représentation graphique d’une association plusieurs-à-plusieurs
Mais en plus, il faut ajouter les attributs qui caractérisent cette association. Il suffit d’ajouter
ces attributs à notre nouvelle table !
Mais cette nouvelle table dont on parle, c’est notre table tournage, non ?
Oui, tout à fait, bravo !
Vous avez vu que par défaut, la clé primaire d’une table issue d’une association plusieurs-à-
plusieurs est composée des deux clés étrangères référençant les deux tables de part et d’autre
de l’association.
Ici, vous êtes donc sûr que le groupe (titreoeuvre, loc_scene, code_postal) fait partie de la clé
primaire de tournage . Cependant, selon le cas, il faudra parfois ajouter d’autres attributs à la
clé. Dans notre cas, il est clairement possible qu’une œuvre soit tournée plusieurs fois au
même endroit.
Voici donc une clé primaire possible : (titre_oeuvre, loc_scene, code_postal, date_de_debut). En ef-
fet, on ne peut pas avoir 2 lignes de tournage relatives au même film, au même endroit, et com-
mençant le même jour. Si c’est le cas, cela signifie que ces deux lignes correspondent en fait à
une seule et unique session de tournage.
La clé primaire de la table issue d’une classe d’association plusieurs-à-plusieurs est composée
d’au moins les deux clés étrangères, et optionnellement de certains des autres attributs (à dé-
terminer sur le critère de l’unicité de la clé primaire).
Classe d’association sur une relation un-à-plusieurs
Pour une classe d’association d’une relation un-à-plusieurs, les attributs de la classe d'associa-
tion sont ajoutés à la table qui est du côté « plusieurs ».
Même traduction de la classe d’association un-à-un, que le visuel précédent pour que vous
l'ayez facilement sous les yeux !
En résumé
Une composition est traduite de la même manière qu’une association un-à-plusieurs ;
mais en plus, on ajoute, à la clé primaire de la table composante, la clé étrangère vers
la table composite.
Une classe d’association sur une association plusieurs-à-plusieurs se traduit en une
nouvelle table. Cette table contient tous les attributs de la classe d’association, ainsi
que deux clés étrangères référençant les deux tables de part et d’autre de l’association.
La seconde étape de traduction de votre diagramme UML en modèle relationnel est terminée.
Bravo ! Vous avez transformé vos compositions et vos classes d'associations. Voyons, au cha-
pitre suivant, comment transformer vos relations d'héritage.
Mais vous le savez désormais, ce qui différencie une composition d’une simple association
un-à-plusieurs, c’est que le composant ne peut exister sans son composite. Ainsi, on identifie
un composant à partir de son composite. C’est-à-dire que la clé primaire du composant
inclut/comprend obligatoirement le composite.
C’est le cas entre une œuvre et sa société de production. Car comme vous l’avez vu précé-
demment, une œuvre se définit par son titre ET par la société qui l’a produite (car il arrive que
deux œuvres aient le même titre).
Maintenant que nous avons ajouté une clé étrangèresociete_proddans oeuvre , qui référence so-
ciete_de_production, il est donc possible d’identifier chaque œuvre par son titre et sa société.
Vous avez donc trouvé la dernière des clés primaires de votre modèle relationnel : celle de la
Jusqu’à maintenant, notre table tournage n’avait que deux attributs. Seules, ces deux dates ne
veulent rien dire : il faut pouvoir les lier à l’œuvre et au lieu correspondants. Vous vous en
doutez peut-être : il va falloir utiliser des clés étrangères !
Classe d’association sur une relation plusieurs-à-plusieurs
La relation entreoeuvre et lieuest de type plusieurs-à-plusieurs.
Vous savez déjà comment traduire une telle relation : en ajoutant une nouvelle table qui
contient deux clés étrangères référençant les deux tables de part et d’autre de l’association.
Voici ce que cela donnerait :
Représentation graphique d’une association plusieurs-à-plusieurs
Mais en plus, il faut ajouter les attributs qui caractérisent cette association. Il suffit d’ajouter
ces attributs à notre nouvelle table !
Mais cette nouvelle table dont on parle, c’est notre table tournage, non ?
Oui, tout à fait, bravo !
Vous avez vu que par défaut, la clé primaire d’une table issue d’une association plusieurs-à-
plusieurs est composée des deux clés étrangères référençant les deux tables de part et d’autre
de l’association.
Ici, vous êtes donc sûr que le groupe (titreoeuvre, loc_scene, code_postal) fait partie de la clé
primaire de tournage . Cependant, selon le cas, il faudra parfois ajouter d’autres attributs à la
clé. Dans notre cas, il est clairement possible qu’une œuvre soit tournée plusieurs fois au
même endroit.
Voici donc une clé primaire possible : (titre_oeuvre, loc_scene, code_postal, date_de_debut). En ef-
fet, on ne peut pas avoir 2 lignes de tournage relatives au même film, au même endroit, et com-
mençant le même jour. Si c’est le cas, cela signifie que ces deux lignes correspondent en fait à
une seule et unique session de tournage.
La clé primaire de la table issue d’une classe d’association plusieurs-à-plusieurs est composée
d’au moins les deux clés étrangères, et optionnellement de certains des autres attributs (à dé-
terminer sur le critère de l’unicité de la clé primaire).
Classe d’association sur une relation un-à-plusieurs
Pour une classe d’association d’une relation un-à-plusieurs, les attributs de la classe d'associa-
tion sont ajoutés à la table qui est du côté « plusieurs ».
Même traduction de la classe d’association un-à-un, que le visuel précédent pour que vous
l'ayez facilement sous les yeux !
En résumé
Une composition est traduite de la même manière qu’une association un-à-plusieurs ;
mais en plus, on ajoute, à la clé primaire de la table composant, la clé étrangère vers la
table composite.
Une classe d’association sur une association plusieurs-à-plusieurs se traduit en une
nouvelle table. Cette table contient tous les attributs de la classe d’association, ainsi
que deux clés étrangères référençant les deux tables de part et d’autre de l’association.
La seconde étape de traduction de votre diagramme UML en modèle relationnel est terminée.
Bravo ! Vous avez transformé vos compositions et vos classes d'associations. Voyons, au cha-
pitre suivant, comment transformer vos relations d'héritage.
Transformez vos relations d’héritage
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.
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.
La clé primaire de chaque table fille doit être la même clé primaire que la table mère. Cha-
cune 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_tvetserie), 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
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.
Cette méthode est adaptée à la majeure partie des cas de figure. Utilisez-la donc par défaut.
Cependant, dans votre cas, cela implique six tables, et la majeure partie de ces tables n’a pas
d’autre attribut que la clé primaire. Elles ne contiennent donc quasiment pas d'information in-
téressante. La création d’une table par classe fille est donc ici peu adaptée.
Transformez votre héritage par la classe mère
C’est la solution la mieux adaptée à votre cas ; c’est donc celle que vous utiliserez pour la
suite du cours.
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 attri-
but 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 «
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 « Oeuvre » et « Serie » ne sont pas traduites en tables
Cette méthode est adaptée lorsque la classe mère est abstraite, car l’absence de table corres-
pondant à la classe mère traduit bien de fait qu’il est interdit d’instancier la classe mère.
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.
Voici la réponse :
Réponse à l'exercice
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.