Bonjour Idriss,
En attendant le retour de Bakura...
Envoyé par
ok.Idriss
Bien entendu, changer une règle de gestion est une faute (sauf si on fait évoluer la conception). Je voulais simplement dire que dans le cas d'une cardinalité 1,1 j'aurais plutôt mis la donnée date dans l'entité du côté 1,1 mais bon à partir du moment ou l'on peut créer une table associative, ça change tout
...
A l’avenir, vous aurez à vous prononcer sur d’autres MCD comportant des pattes à cardinalités 1,1, où les associations-types connectées sont porteuses de propriétés. Comme je l’ai déjà précisé, il faut rappeler aux concepteurs que ces propriétés doivent de préférence figurer au sein des entités-types qui sont du côté 1,1. Cela est impérieux pour les étudiants qui rendent leur copie, car les professeurs ne sont pas forcément tous des DBA . En revanche, dans le contexte de la Production informatique, pour les motifs que j’ai déjà évoqués (il peut y en avoir d’autres, tels que la confidentialité : propriétés visibles seulement par certaines personnes), le DBA peut être amené à mettre en œuvre une ou plusieurs tables « associatives ».
Maintenant, vous aurez compris qu’il faut du doigté, et éviter d’écrire :
« En effet la cardinalité 1,1 se traduit par une clef étrangère et non une table associative au niveau relationnel ... ces modélisations ne peut donc être traduite. »
De mon côté, j’essaie de garder à l'esprit cette formule de H.L. Mencken, cité par Claude Gagnière (Pour tout l’or des mots) :
« Lorsqu’un diplomate dit oui, cela signifie peut-être. Lorsqu’il dit peut-être, cela veut dire non... et quand il dit non, cela veut dire qu’il n’est pas un diplomate ».
Claude Gagnière poursuit :
« Lorsqu’une lady dit non, cela signifie peut-être. Lorsqu’elle dit peut-être, cela veut dire oui. Mais si elle dit oui, cela signifie... qu’elle n’est pas une lady ! ».
Et comme l'a dit je ne sais plus qui :
« Lorsqu’un militaire dit oui, cela veut dire oui. Lorsqu’il dit non, cela veut dire non. Mais s’il dit peut-être, cela veut dire qu’il n’est pas un militaire... »
Envoyé par
ok.Idriss
relation_1 (id_1, ...)
relation_2 (id_2, ...)
relation_a (id_1#, id_2#)
Attention ! id_2# ne participe pas à la clé de relation_a. Il faut écrire :relation_1 (id_1, ...)
relation_2 (id_2, ...)
relation_a (id_1#, id_2#)
Sinon cela revient à transformer 1,1 en 1,N. N'oubliez pas la contrainte d'irréductibilité des clés candidates.
Envoyé par
ok.Idriss
Mais la première solution n'est-elle pas plus optimisée en termes de place qui sera occupée par le SGBDR sur un grand nombre d'occurrences ?
A la façon du diplomate, je répondrais : « peut-être »... En effet, vu de la production, cela fait trois fichiers de plus, un pour le table space hébergeant la table relation_a, deux pour les index. Si la table contient un milliard de lignes, on y regardera à deux fois, en mettant en balance les avantages/inconvénients recensés, tels que les contentions (inter-blocages en mise à jour). En fait, le nombre d’occurrences n’est qu’un paramètre parmi d’autres, la partie émergée de l’iceberg visible par les non DBA. Par exemple, si la table relation_a est fortement chahutée à cause des mises à jour affectant tel ou tel attribut, cette fois-ci, indépendamment de la mauvaise qualité du service rendu aux utilisateurs, ce sont les fichiers journaux qui vont devenir obèses, les tâches de sauvegarde de réorganisation qui seront fortement consommatrices de ressources (en temps et en espace), et les conclusions des DBA pourront aller dans le sens de la mise en œuvre de la table relation_a, plutôt que de la simple clé étrangère permettant à relation_1 de référencer relation_2.
=>
La modélisation conceptuelle est une chose, les décisions finales reviennent à la Production. Mais je ne sais pas si on enseigne cela aux étudiants. En tout cas, sur le terrain, on acquiert des techniques et un savoir qui sont le fruit des enseignements du vécu, le sien propre et celui des anciens.
Keep up the good job.
Partager