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 : 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		
);
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
 
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