Bonsoir Galihom,
Je reprends donc, et fais observer que, dans votre MCD, l’association describe_vehicle est redondante. Supposons en effet qu’elle disparaisse : grâce à l’association have_livery, on détermine la livrée de chaque véhicule et, transitivement donc, grâce à l’association have_model_liveries, on en détermine le modèle. Ainsi, l’association describe_vehicle est inessentielle et doit disparaître.
Dans ces conditions, pour cette partie, le MCD se réduit au le suivant :
En passant, deux véhicules ne peuvent pas avoir la même immatriculation, en conséquence de quoi on définit un identifiant alternatif, symbolisé dans le MCD par le mickey <ai> :
Pour arriver à mettre en œuvre cet identifiant alternatif, procédez comme dans le billet PowerAMC : définir un identifiant alternatif.
Le MLD (MPD chez PowerAMC) qui en est dérivé est le suivant :
Au stade SQL, pour connaître le modèle d’un véhicule donné, il faudra une jointure des 3 tables :
SELECT ModeleNom
FROM VEHICULE AS x JOIN LIVREE AS y ON x.LivreeId = y.LivreeId
JOIN MODELE AS z ON y.ModeleId = z.ModeleId
WHERE x.Immatriculation = '1234XYZ56' ;
Bien entendu, avec la mise en oeuvre de l’association describe_vehicle l’attribut ModeleId ferait partie des attributs de la table VEHICULE, et cette requête SQL se simplifierait, en se réduisant à :
SELECT ModeleNom
FROM VEHICULE AS x JOIN MODELE AS y ON x.ModeleId = y ModeleId
WHERE x.Immatriculation = '1234XYZ56' ;
Il est certainement frustrant de ne pouvoir utiliser cette requête. Mais...
Parlons de l’identification relative
Nul ne pourrait vous en vouloir que l’attribut ModeleId fasse partie des attributs de la table VEHICULE.
Si l’on part du principe que les livrées sont au modèle ce que des lignes de commande sont à une commande, c'est-à-dire que ces livrées constituent une propriété multivaluée du modèle, l’entité-type LIVREE est dite faible (weak entity-type) par rapport à MODELE : elle n’est pas autonome, la suppression d’un modèle entraîne celle de ses livrées. La relation entre MODELE et LIVREE correspond à la relation de composition que l’on trouve dans les diagrammes de classes UML.
En tout état de cause, avec PowerAMC on signifie cette dépendance au moyen de l’identification relative. Techniquement :
Dans le MCD, en cliquant sur la patte d’association connectant LIVREE et MODELE_LIVREE, on peut accéder aux propriétés de la patte :
En cliquant sur « Propriétés », on accède à la fenêtre « Propriété du lien d’association », où il suffit de cocher la case « Identifiant » :
Le MCD devient le suivant, dans lequel la cardinalité 1,1 portée par la patte en question est mise entre parenthèses, ce qui symbolise chez PowerAMC l’identification relative (autres AGL, autre symbolisme) :
D’où le MLD :
Et cette fois-ci, ModeleId fait bien partie légalement et en toute légitimité des attributs de la table VEHICULE. En effet, conséquence de l’identification relative, la paire {ModeleId, LivreeId} est clé primaire de la table LIVREE, donc clé étrangère dans la table VEHICULE. Par conséquent, la 2e requête SQL peut être utilisée.
Si vous avez des questions, n’hésitez pas, notamment en ce qui concerne la mise en oeuvre concrète de l’identification relative avec MySQL.
Partager