Bonsoir assss,
Je voudrais savoir s'il est possible d'inclure une relation ternaire dans une relation binaire comme ceci.
Au sens de la théorie des ensembles, la binaire peut effectivement être vue comme un sous-ensemble de la ternaire.
Dans le contexte de Merise, le document de référence en matière de contraintes dans les MCD est le suivant :
Afcet - Le formalisme de données Merise - Extensions du pouvoir d’expression - Journée d’étude organisée par le Groupe de Travail 135 « Conception des systèmes d’information » (Collège AFCET-GID) - Jeudi 15 novembre 1990, Paris.
Où il est écrit :
Dans votre cas, cet énoncé traitant de la contrainte d’inclusion se lit ainsi :
La relation Relation3 est soumise à une "inclusion" dans la relation FairePartie vis à vis de la liste (SPORTIF, EQUIPE) d’entités-types communes appelée "pivot" de la contrainte, si et seulement si aucune occurrence de (SPORTIF X EQUIPE) ne peut participer à Relation3 sans participer à FairePartie. La relation Relation3 est appelée la "portée", la relation FairePartie la "cible" de la contrainte.
Comme le pivot (SPORTIF, EQUIPE) contient l’ensemble des entités-types participant à la contrainte, à savoir SPORTIF et EQUIPE, il est implicite, il est inutile de faire figurer les pointillés évoqués dans la définition du terme PIVOT.
Vous remarquerez que l’entité-type MATCH n’est pas partie prenante dans cette affaire, puisque seules le sont les entités-types communes à Relation3 et FairePartie, c'est-à-dire SPORTIF et EQUIPE. En vertu de quoi, que l’association Relation3 soit ternaire ou pas n’a aucune importance.
Dans votre diagramme, conformément à la référence Afcet, ajoutez si possible la pointe de la flèche qui atteint la cible...
Sur certains tutos trouvés sur le net il est mentionné que les associations doivent être de même structure pour que les contraintes ensemblistes puissent appliquées.
Les auteurs (dont j’espère ne pas faire partie !) de ces tutos ont dû mal lire le document de référence (dont les auteurs sont cette fois-ci des épées), où l’on voit que, dans l’exemple retenu, la portée Enseigne est une association ternaire, tandis que la cible SaitEnseigner est une binaire. Ces gens s’imposent des contraintes non justifiées, ce sont des bourriques, vous leur collerez un mauvais point ! Du point de vue ensembliste, disons au niveau de la théorie relationnelle, la contrainte se lit ainsi :
Relation3{NumLicence, NumEquipe} ⊆ FairePartie ;
Où Relation3 et FairePartie sont des relvars (variables relationnelles) et où Relation3{NumLicence, NumEquipe} représente la projection de Relation3 sur les attributs NumLicence et NumEquipe.
Au niveau MLD, vous devrez avoir le diagramme suivant, selon lequel la contrainte d’inclusion est garantie d’office :
Et au niveau SQL :
TABLE EQUIPE
1 2 3 4 5
| CREATE TABLE EQUIPE
(
NuumEquipe INT NOT NULL,
CONSTRAINT EQUIPE_PK PRIMARY KEY (NuumEquipe)
) ; |
TABLE SPORTIF
1 2 3 4 5
| CREATE TABLE SPORTIF
(
NumLicence INT NOT NULL,
CONSTRAINT SPORTIF_PK PRIMARY KEY (NumLicence)
) ; |
TABLE FAIRE_PARTIE
1 2 3 4 5 6 7 8 9 10
| CREATE TABLE FAIRE_PARTIE
(
NumLicence INT NOT NULL,
NuumEquipe INT NOT NULL,
CONSTRAINT FAIRE_PARTIE_PK PRIMARY KEY (NumLicence, NuumEquipe),
CONSTRAINT FAIRE_PARTIE_SPORTIF_FK FOREIGN KEY (NumLicence)
REFERENCES SPORTIF,
CONSTRAINT FAIRE_PARTIE_EQUIPE_FK FOREIGN KEY (NuumEquipe)
REFERENCES EQUIPE
) ; |
TABLE MATCH
1 2 3 4 5 6 7 8 9
| CREATE TABLE MATCH
(
NumLicence INT NOT NULL,
NuumEquipe INT NOT NULL,
NumMatch INT NOT NULL,
CONSTRAINT MATCH_PK PRIMARY KEY (NumLicence, NuumEquipe, NumMatch),
CONSTRAINT MATCH_FAIRE_PARTIE_FK FOREIGN KEY (NumLicence, NuumEquipe)
REFERENCES FAIRE_PARTIE
) ; |
J’espère que vous voilà un peu plus rassuré...
Partager