Bonjour à tous,
je vous présente rapidement mon problème puis je vous pose ma question.
J'ai trois tables :
- Utilisateurs avec l'uid et les pseudos des utilisateurs
- Roles avec un identifiant (rid) et les noms de mes rôles
- Utilisateurs_Roles une table de jonction entre les deux précédentes
Je souhaite créer une table 'classe' avec une contrainte sur la colonne uid
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 CREATE TABLE IF NOT EXISTS Utilisateurs ( uid SERIAL, username VARCHAR(45) NOT NULL, ... PRIMARY KEY (uid), UNIQUE (username) ); CREATE TABLE IF NOT EXISTS Roles ( rid SERIAL, nom VARCHAR(60) NOT NULL, PRIMARY KEY (rid), UNIQUE (nom) ); CREATE TABLE IF NOT EXISTS Utilisateurs_Roles ( uid INT NOT NULL, rid INT NOT NULL, PRIMARY KEY (uid, rid), FOREIGN KEY (uid) REFERENCES Utilisateurs(uid) ON DELETE CASCADE, FOREIGN KEY (rid) REFERENCES Roles(rid) ON DELETE CASCADE );
J'aimerais que sur la clé profPrinc_id il y ait une contrainte pour qu'on ne puisse mettre que des uid d'utilisateurs ayant un certain rôle (exemple rid = 3).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 CREATE TABLE IF NOT EXISTS Classes ( id SERIAL, nom VARCHAR(45), profPrinc_id INT, PRIMARY KEY (id), UNIQUE (nom), FOREIGN KEY (profPrinc_id) REFERENCES Utilisateurs(id) ON DELETE SET NULL )
Ma première idée était d'introduire une sous-requête dans un CHECK sur profPrinc_id mais ce n'est apparemment pas possible (d'après mes recherches).
Quelqu'un aurait-il une idée pour cela ? Ou faut-il que je déplace le problème dans mon php ?
Merci par avance
Partager