Envoyé par
Kropernic
je ne suis toujours pas sûr des cardinalités pour l'association COMMANDER qui a lieu entre GIFT_GFT - FOURNISSEUR_FRN - COMMANDE_CMD.
On va essayer de vous administrer une potion façon Volfoni, Naudin et compagnie. Votre association COMMANDER est une ternaire dont chaque patte porte une cardinalité maximum N. Les choses se lisent donc littéralement ainsi :
Un fournisseur peut participer plus d’une fois à l’association, pour une ou plusieurs commandes et un ou plusieurs gifts.
Une commande peut participer plus d’une fois à l’association, en relation avec un ou plusieurs fournisseurs, pour un ou plusieurs gifts.
Un gift peut participer plus d’une fois à l’association, en relation avec un ou plusieurs fournisseurs, pour une ou plusieurs commandes.
Descendons dans la soute. Au niveau logique, l’en-tête de la table COMMANDER est le suivant (elle n’est pas porteuse d’attributs) :
COMMANDER {GftId, CmdId, FrnId}
Elle a pour clé :
K = {GftId, CmdId, FrnId}
Les instances qui suivent sont donc légales :
1 2 3 4 5 6 7 8 9
| GftId CmdId FrnId
----- ----- -----
G1 C1 F1
G1 C1 F2
G1 C2 F1
G1 C2 F3
G2 C1 F1
G2 C1 F4
... |
Manifestement c’est le bôdel !
Je n’ai pas fouillé dans la discussion pour voir ce qu'il en est exactement mais, dans le cadre cet exercice sur les associations ternaires, admettons qu’un gift puisse se retrouver dans plus d’une commande.
Comme dit CinePhil avec bon sens, je le cite :
« Moi j'ai de gros doutes, a priori et sans avoir relu les messages précédents, qu'un gift puisse être commandé plusieurs fois à un fournisseur ! »
Pour des raisons de complétude, j’ajouterai explicitement — ce que sous-entend CinePhil — que je serais étonné qu’une commande puisse aussi avoir été passée auprès de plus d’un fournisseur.
Dans ces conditions, la présence simultanée des paires <G1, F1> et <G1, F2> n'est plus possible, ainsi que celle des paires <C1, F1> et <C1, F2>.
Vous nous direz si l’approche formelle et mécanique, qui suit nous permet d’enfoncer un clou...
Allons-y. Du point de vue de la théorie des dépendances, les doutes manifestés peuvent être traduits sous forme de dépendances fonctionnelles :
DF1 : {GftId} -> {FrnId} (traduisant le doute cinephilien),
DF2 : {CmdId} -> {FrnId} (traduisant le doute complémentaire fsmrelien).
Et la forme normale de Boyce-Codd (BCNF) est violée, car les déterminants {GftId} et {CmdId} de ces dépendances fonctionnelles ne sont pas clés candidates de la table COMMANDER (la seule clé étant K = {GftId, CmdId, FrnId}).
On se sert alors du théorème de Heath pour normaliser COMMANDER, qui est décomposable en deux tables.
Version cinephilienne :
T1 {GftId, FrnId}, de clé {GftId},
T2 {GftId, CmdId}, de clé {GftId, CmdId}.
Version fsmrelienne :
T1 {CmdId, FrnId}, de clé {CmdId},
T2 {GftId, CmdId}, de clé {GftId, CmdId}.
Autrement dit, l’approche synthétique (disons platonicienne) utilisée par CinePhil a donné lieu à la solution :
Gift -0,n----concerner----1,n- Commande -1,1----passer----0,n- Fournisseur
Solution que l’on retrouve par l’approche analytique (disons aristotélicienne) en procédant à la rétro-conception de la version tabulaire cinephilienne. On dispose en plus d'une solution fsmrelienne, juste et rigolote, mais manifestement sans intérêt du point de vue conceptuel si on en fait la rétro-conception, puisqu'on perd le lien Commande - Fournisseur :
[Commande] -- 1,n --(composer) --0,n-- [Gift] -- 1,1 -- (vendre) -- 0,n -- [Fournisseur]
J’espère que le clou ne s’est pas tordu en cours de frappe...
Partager