Bonsoir Gaël,
Envoyé par
LecGaël
Je n'ai pas saisi, désolé
Cela veut dire que l’organe o et la série s sont dans le même lieu.
De toute façon, vous êtes d’accord avec la formulation négative de la question, donc pas de problème de ce côté-là.
Illustrons quand même. Partons du MCD comportant la boucle ORGANE → LIEU → SERIE → ORGANE :
MLD correspondant
Conséquence du MLD : rien ne s’oppose à ce que l’on ait les valeurs suivantes :
ORGANE_LIEU {organe lieu}
o1 l1
ORGANE_SERIE {organe serie}
o1 s1
SERIE_LIEU {serie lieu}
s1 l2
Ainsi l’organe o1 est dans un lieu qui n’est pas celui de sa série, mais ceci est illégal du point de vue de vos règles de gestion ! D’où la nécessité de la mise en oeuvre de la contrainte imposant que l1 et l2 ne soient qu’un, disons l2 :
ORGANE_LIEU {organe lieu}
o1 l2
ORGANE_LIEU {organe serie}
o1 s1
SERIE_LIEU {serie lieu}
s1 l2
Envoyé par
LecGaël
Je ne sais pas de quoi vous parlez.
Est-ce que ce qui précède vous éclaire ?
Envoyé par
LecGaël
Est ce que le fait de pouvoir trouver plusieurs organes en fonction d'une série et un lieu donnés et plusieurs séries en fonction d'un lieu et d'un organe donnés rend la modélisation impossible ?
Certes non ! Tout est possible, mais il ne faut pas faire n’importe quoi... Parmi les différents scénarios il faut en retenir un qui colle aux règles de gestion, lesquelles doivent au préalable être complètes, d’où les questions que je vous pose.
Par exemple, si je pose la question suivante (je parle du point de vue fonctionnel, c’est-à-dire du QUOI et surtout pas du COMMENT et du QUAND !) :
Si la série s est sur le lieu l, et si l’organe o est associé à la série s, alors l’organe o doit-il nécessairement être lui aussi sur le lieu l ?
Si vous répondiez affirmativement, alors on saurait où localiser l’organe, il serait dans chaque lieu où se trouve la série, en conséquence de quoi la boucle fatale pourrait être éliminée :
Mais cette façon de procéder de ma part est un peu trop expéditive et ne convient pas. En effet, dans le post #12, vous avez écrit :
« Série 1 : Lieux : Bloc 1, Bloc 2, Bloc 3...
(Organe1, Série 1) => Lieux : Bloc1
(Organe1, Série 2) => Lieux : Bloc 1, Bloc 5 »
Il faut donc limiter la localisation de l’organe par rapport à la localisation de ses séries, en ajoutant un filtre, appelons-le SERIE_LIEU_ORGANE, d’où le scénario possible :
MLD
On a toujours une boucle, mais il faut surtout observer que le passage automatique du MCD à ce MLD a provoqué la mise en oeuvre de deux colonnes jumelles serieId et serieId2 dans la table SERIE_LIEU_ORGANE, l’une référençant la colonne serieId de la table SERIE_LIEU, l’autre référençant la colonne serieId de la table ORGANE_SERIE. C’est là où le bât blesse, et c’est la conséquence de la boucle désespérément fatale. Pour parvenir à une modélisation correcte, c’est-à-dire éliminer la fatalité, il faut ne conserver qu’une des deux colonnes, référençant à la fois la colonne serieId de la table SERIE_LIEU et la colonne serieId de la table ORGANE_SERIE. Utilisons donc la gomme qui va bien, le MLD devient alors :
On a toujours une boucle, mais cette fois-ci elle a été rendue parfaitement inoffensive quant aux opérations. Les organes ne peuvent qu’être installés légalement dans les lieux, c’est-à-dire dans le respect de la règle « (a) Si l’organe o est associé à la série s, (b) si la série s n’est pas associée au lieu l, (c) alors l’organe o ne peut pas être associé au lieu l ». Ainsi, dans l’exemple ci-dessous, le lieu l5 n’est pas associé à la série s1, en conséquence de quoi il n’y a pas moyen d’associer l’organe o1 au lieu l5 (contrainte de clé étrangère oblige au stade SQL), il ne peut l’être qu’aux lieux l1, l2, l3.
Exemple :
SERIE {serie}
s1
s2
s3
LIEU {lieu}
l1
l2
l3
l4
l5
l6
ORGANE {organe}
o1
o2
o3
SERIE_LIEU {serie lieu}
s1 l1
s1 l2
s1 l3
s2 l1
s2 l5
s2 l6
ORGANE_SERIE {organe serie}
o1 s1
o1 s2
o1 s3
SERIE_LIEU_ORGANE {serie lieu organe}
s1 l1 o1
s2 l1 o1
s2 l5 o1
Vous pourriez m’objecter :
« Mais ma table rle_orgserie est la même que la table SERIE_LIEU_ORGANE ! »
Ce à quoi je répondrais :
Structurellement, certes ! mais quant au contenu, que nenni ! Pour associer des lieux à des séries (par exemple les lieux l1, l2, l3 à la série s1), selon votre dernier MLD vous serez dans l’obligation d’associer dans rle_orgserie des organes aux paires (s1, l1), (s1, l2), (s1, l3), ce qui est illégitime si l’on fait référence aux exemples que vous donnez dans le post #12.
A suivre...
N.B. Je suppose que ce que vous appelez un organe est en fait un type d’organe, sinon il y aurait bilocation (le même organe en deux lieux à la fois)...
Partager