Bonsoir,
Envoyé par
escartefigue
un MLD brut de fonderie c'est un peu court pour valider, il manque les règles de gestion
Je confirme ! Un MLD (ou un MCD) est une conséquence des règles de gestion, mais dans la très grande majorité des cas les règles de gestion ne sont pas la conséquence du MLD.
asasn, examinons par exemple les tables USER et FRAME. Selon votre diagramme :
(RG1) Chaque utilisateur est au moins et au plus un manager ;
(RG2) Chaque manager est au moins et au plus un utilisateur ;
(RG3) Chaque utilisateur encadre au moins un et au plus plusieurs utilisateurs ;
(RG4) Chaque utilisateur est encadré par au moins et au plus un utilisateur.
Du fait de la conjugaison des règles RG1 et RG2, il y a bijection entre USER et FRAME, ce qui se traduit au niveau des opérations par une boucle infinie.
Du fait de la conjugaison des règles RG3 et RG4, il y a surjection entre USER et FRAME, ce qui se traduit au niveau des opérations par une autre boucle infinie.
On retrouve donc le problème que vous désiriez éviter quand vous écrivîtes à juste titre :
Envoyé par
asasn
Dans ma première idée c'était d'avoir une relation récursive. Mais cela voudrais dire que chaque utilisateur a forcement un manager.
Il faut donc remplacer la bijection par une injection :
[USER]—||________O|—[FRAME]
Et remplacer la surjection par une application :
[USER]—||------O<[FRAME]
Qui plus est, vous avez utilisé l’identification relative : FRAME est alors à la fois une propriété monovaluée de USER et une propriété multivaluée de USER, bref, dans votre diagramme, FRAME a pour clé primaire la paire {frame_fk_manager_user_id, frame_fk_user_id}, alors que ça devrait être le singleton {frame_fk_user_id}.
En tout cas, l’ensemble de vos tables est à vérifier quant aux cardinalités minimales et à l’dentification relative. Par exemple, l’association entre TYPE_QUIZ et QUIZ est très vraisemblablement « non identifying », car QUIZ fait plutôt référence à TYPE_QUIZ au lieu d’en être la propriété :
[TYPE_QUIZ]—||------O<[QUIZ]
D’où l’élimination de la colonne quiz_fk_type_quiz_id dans la clé primaire de la table QUIZ.
Partager