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 :

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*/
);
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.

La contrainte doit ressembler à ça mais je ne suis pas sur de moi :

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)
Merci d'avance.

Edit : c'est sous PostGreSQL.