bonjour ,
j ai quatre table qui sont: direction , service , division et poste et un poste est soit lié au direction ou service ou division pas les deux et ou trois en même et pour cela je voudrais creer une contrainte d'exclusion dans la table poste .
voici mes table :
Code sql : 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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
 
//table  direction
 
CREATE TABLE direction(
        id_direction   int (11) Auto_increment  NOT NULL ,
        code_direction Varchar (25) NOT NULL ,
        nom_direction  Varchar (50) NOT NULL ,
        PRIMARY KEY (id_direction )
)ENGINE=InnoDB;
 
// table  service  
CREATE TABLE service(
        id_service   int (11) Auto_increment  NOT NULL ,
        code_service Varchar (25) ,
        nom_service  Varchar (50) NOT NULL ,
        id_direction Int ,
        PRIMARY KEY (id_service )
)ENGINE=InnoDB;
 
// division
 
CREATE TABLE division(
        id_division  int (11) Auto_increment  NOT NULL ,
        nom_division Varchar (25) NOT NULL ,
        id_service   Int ,
        PRIMARY KEY (id_division )
)ENGINE=InnoDB;
 
 
//poste  
 
CREATE TABLE poste(
        id_poste     int (11) Auto_increment  NOT NULL ,
        code_poste   Varchar (25) ,
        nom_poste    Varchar (25) NOT NULL ,
        id_division  Int ,
        id_direction Int ,
        id_service   Int ,
        PRIMARY KEY (id_poste )
)ENGINE=InnoDB;
 
//definition  les contraintes  des cle etranger 
 
ALTER TABLE poste ADD CONSTRAINT FK_poste_id_division FOREIGN KEY (id_division) REFERENCES division(id_division);
ALTER TABLE poste ADD CONSTRAINT FK_poste_id_direction FOREIGN KEY (id_direction) REFERENCES direction(id_direction);
ALTER TABLE poste ADD CONSTRAINT FK_poste_id_service FOREIGN KEY (id_service) REFERENCES service(id_service);

maintenant ce que je veux c'est creer une contrainte d'exlcusion qui va les deux autre si une est selectionner c'est dire mettre les deux en null
merci d'avance