Contrainte sur une colonne
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
Code:
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
); |
Je souhaite créer une table 'classe' avec une contrainte sur la colonne uid
Code:
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
) |
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).
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