Bonsoir win_ubuntu,
Envoyé par
win_ubuntu
il ne devrait pas y avoir deux matchs sur le même terrain à la même heure
Si on modélise directement au niveau relationnel (au sens de la théorie relationnelle), la modélisation est la suivante (on n’y dessine pas, puisqu’on est calé sur la théorie des ensembles, le calcul des prédicats du 1er ordre et l’algèbre relationnelle...) :
VAR TERRAIN BASE RELATION
{
NoTerrain INTEGER
, Surface INTEGER
}
KEY { NoTerrain } ;
VAR MATCH BASE RELATION
{
NoMatch INTEGER
, NoTerrain INTEGER
, Heure TIMESTAMP
}
KEY { NoMatch }
KEY { NoTerrain, Heure }
FOREIGN KEY { NoTerrain } REFERENCES TERRAIN ;
La clé { NoTerrain, Heure } signifie que sur un terrain et à une heure donnée, il ne peut y avoir qu’un seul match.
Maintenant, s’il faut modéliser ça à la Merise, ça devient sportif...
Pour exprimer la contrainte selon laquelle « sur un terrain et à une heure donnée, il ne peut y avoir qu’un seul match », il faudrait graphiquement représenter la chose à peu de choses près comme ceci :
La cardinalité 1,1 portée par la patte connectant MATCH et OCCUPATION signifie qu’un match a lieu sur un seul terrain et à une heure donnée.
La flèche rouge représente une CIF (contrainte d’intégrité fonctionnelle) symbolisant la contrainte selon laquelle sur un terrain et à une heure donnés, il ne peut y avoir qu’un seul match.
Maintenant, votre AGL de modélisation produira un script SQL ne ressemblant en rien à ce que l’on attend :
CREATE TABLE TERRAIN
(
NoTerrain INTEGER
, Surface INTEGER
)
CONSTRAINT TERRAIN_PK PRIMARY KEY (NoTerrain) ;
CREATE TABLE MATCH
(
NoMatch INTEGER
, NoTerrain INTEGER
, Heure TIMESTAMP
)
CONSTRAINT MATCH_PK PRIMARY KEY {NoMatch}
CONSTRAINT MATCH_AK UNIQUE (NoTerrain, Heure)
CONSTRAINT MATCH_FK FOREIGN KEY (NoTerrain) REFERENCES TERRAIN ;
Partager