CREATE TABLE TYPE_EXAMEN
(
IdTypeExamen INT NOT NULL,
LibelleTypeExamen VARCHAR(64) NOT NULL,
CONSTRAINT TYPE_EXAMEN_PK PRIMARY KEY (IdTypeExamen)
) ;
CREATE TABLE POSTE
(
IdPoste INT NOT NULL,
LibellePoste VARCHAR(64) NOT NULL,
CONSTRAINT POSTE_PK PRIMARY KEY (IdPoste)
) ;
CREATE TABLE PROMOTION
(
IdPromo INT NOT NULL,
CONSTRAINT PROMOTION_PK PRIMARY KEY (IdPromo)
) ;
CREATE TABLE POSTE_OFFERT
(
IdTypeExamen INT NOT NULL,
IdPromo INT NOT NULL,
IdPoste INT NOT NULL,
NbrePostes VARCHAR(64) NOT NULL,
CONSTRAINT POSTE_OFFERT_PK PRIMARY KEY (IdTypeExamen, IdPoste, IdPromo),
CONSTRAINT POSTE_OFFERT_TYPE_EXAMEN_FK FOREIGN KEY (IdTypeExamen)
REFERENCES TYPE_EXAMEN (IdTypeExamen),
CONSTRAINT POSTE_OFFERT_POSTE_FK FOREIGN KEY (IdPoste)
REFERENCES POSTE (IdPoste),
CONSTRAINT POSTE_OFFERT_PROMOTION_FK FOREIGN KEY (IdPromo)
REFERENCES PROMOTION (IdPromo)
) ;
CREATE TABLE EXAMEN
(
IdTypeExamen INT NOT NULL,
IdExamen INT NOT NULL,
LibelleExamen VARCHAR(64) NOT NULL,
CONSTRAINT EXAMEN_PK PRIMARY KEY (IdTypeExamen, IdExamen),
CONSTRAINT EXAMEN_TYPE_EXAMEN_FK FOREIGN KEY (IdTypeExamen)
REFERENCES TYPE_EXAMEN (IdTypeExamen)
) ;
CREATE TABLE ECOLE
(
IdEcole INT NOT NULL,
LibelleEcole VARCHAR(64) NOT NULL,
CONSTRAINT ECOLE_PK PRIMARY KEY (IdEcole)
) ;
CREATE TABLE ELEVE
(
IdEleve INT NOT NULL,
IdTypeExamen INT NOT NULL,
IdExamen INT NOT NULL,
IdPromo INT NOT NULL,
IdEcole INT NOT NULL,
CONSTRAINT ELEVE_PK PRIMARY KEY (IdEleve),
CONSTRAINT ELEVE_AK UNIQUE (IdEleve, IdTypeExamen, IdPromo), -- surclé
CONSTRAINT ELEVE_EXAMEN_FK FOREIGN KEY (IdTypeExamen, IdExamen)
REFERENCES EXAMEN (IdTypeExamen, IdExamen),
CONSTRAINT ELEVE_PROMOTION_FK FOREIGN KEY (IdPromo)
REFERENCES PROMOTION (IdPromo),
CONSTRAINT ELEVE_ECOLE_FK FOREIGN KEY (IdEcole)
REFERENCES ECOLE (IdEcole)
) ;
CREATE TABLE CHOISIR
(
IdEleve INT NOT NULL,
IdTypeExamen INT NOT NULL,
IdPromo INT NOT NULL,
IdPoste INT NOT NULL,
CONSTRAINT CHOISIR_PK PRIMARY KEY (IdEleve),
CONSTRAINT CHOISIR_POSTE_OFFERT_FK FOREIGN KEY (IdTypeExamen, IdPoste, IdPromo)
REFERENCES POSTE_OFFERT (IdTypeExamen, IdPoste, IdPromo),
CONSTRAINT CHOISIR_ELEVE_FK FOREIGN KEY (IdEleve, IdTypeExamen, IdPromo)
REFERENCES ELEVE (IdEleve, IdTypeExamen, IdPromo)
) ;
Si votre SGBD est antique et veut à tout prix que les clés étrangères fassent référence exclusivement à des clés primaires, il faudra permuter les rôles de la surclé et de la clé primaire dans la table ELEVE, mais ça n’est qu’un problème de forme.
Partager