Bonjour à tous,
Tout dabors bravo pour votre site ainsi que le forum, je compte squatter ici.
Voilà donc j'ai un projet de base de données, je dois faire une contrainte CHECK mais je ne suis pas sur de la syntaxe.
Voici la table en question :
On doit entre autre gérer l'occupation des lits dans un hopital, je ne considère pas les lits mais les emplacements, donc il faut empêcher qu'on place quelqu'un dans un emplacement déjà occupé (-> où E_P_date_S=NULL). Cependant il faut conserver un historique du passage des patients c'est pourquoi on garde chaque tuple avec la date où le patient est arrivé dans cet emplacement et sa date de départ.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 CREATE TABLE EMP_PAT ( NIP INTEGER, n_emp INTEGER NOT NULL, E_P_date_E DATE, E_P_date_S DATE, CONSTRAINT NIP_n_emp PRIMARY KEY(NIP,E_P_date_E), FOREIGN KEY (NIP) REFERENCES PATIENTS (NIP), FOREIGN KEY (n_emp) REFERENCES EMPLACEMENTS (n_emp) /*contrainte check*/ );
La contrainte doit ressembler à ça mais je ne suis pas sur de moi :
Merci d'avance.
Code : Sélectionner tout - Visualiser dans une fenêtre à part CHECK (E_P_date_S) IN (SELECT E_P_date_S FROM EMP_PAT WHERE n_emp=VALUE ????) IS NULL)
Edit : c'est sous PostGreSQL.
Partager