Bonjour,
J'ai cherché un peu sur le forum, mais je n'ai pas vraiment trouvé de solution à mon problème. Seulement un sujet s'y rapprochant sur les intervalles.
Je vous explique :
Je souhaite créer des groupes, pouvant inclure d'autres groupes.
A la condition qu'un groupe ne puisse pas se contenir lui-même, et bien sûr qu'un groupe inclus dans un autre ne puisse jamais pouvoir contenir celui dans lequel il est déjà contenu directement ou indirectement.
Voila ce que j'ai sorti comme bout de code, mais j'obtiens l'erreur 1415....
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 CREATE DATABASE hierarchie; use hierarchie; CREATE TABLE groupe ( id_groupe INT(10) NOT NULL auto_increment PRIMARY KEY, nom VARCHAR (10) NOT NULL, UNIQUE (id_groupe, nom) ); INSERT INTO groupe (nom) VALUES ("G1"); INSERT INTO groupe (nom) VALUES ("G2"); INSERT INTO groupe (nom) VALUES ("G3"); INSERT INTO groupe (nom) VALUES ("G4"); INSERT INTO groupe (nom) VALUES ("G5"); INSERT INTO groupe (nom) VALUES ("G6"); CREATE TABLE inclusion ( id_inclusion INT(10) NOT NULL auto_increment PRIMARY KEY, id_groupe INT(10), id_groupe_inclus INT(10), unique (id_groupe,id_groupe_inclus), FOREIGN KEY (id_groupe) REFERENCES groupe (id_groupe), FOREIGN KEY (id_groupe_inclus) REFERENCES groupe (id_groupe) );
Pour pouvoir donc entrer des données dans la table inclusion, il me faut donc faire un petit contrôle par rapport à la logique d'inclusion:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 INSERT INTO inclusion (id_groupe, id_groupe_inclus) VALUES (1,2); INSERT INTO inclusion (id_groupe, id_groupe_inclus) VALUES (2,3); # en principe 1 devrait inclure 3, et donc 3 ne pourrait pas inclure 1 INSERT INTO inclusion (id_groupe, id_groupe_inclus) VALUES (3,2); # 3 nepeut donc pas inclure 2
Par ailleurs, faut-il pour ce besoin un trigger ou une procédure ?
Je vous remercie par avance pour votre aide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 DELIMITER $$ CREATE TRIGGER controle_inclusion BEFORE INSERT ON inclusion FOR EACH ROW BEGIN #END$$ IF NEW.id_groupe = NEW.id_groupe_inclus OR (NEW.id_groupe IN (SELECT id_groupe_inclus FROM groupe WHERE id_groupe=NEW.id_groupe)) AND (NEW.id_groupe_inclus IN (SELECT id_groupe FROM groupe WHERE id_groupe_inclus=NEW.id_groupe)) THEN SELECT 'inclusion impossible'; #ELSE END IF; END$$
Partager