Bonjour,
Je n'arrive pas à lier correctement une table CHOIX à une table DONNEES par une relation 1,1 --> 0,n. La table DONNEES possède une clé primaire multiple qui est la concaténation de 4 champs (FORME_ID, CHAMPS_1_ID, CHAMPS_2_ID, CHAMPS_3_ID) :
Lorsque je visualise les colonnes de la table CHOIX, seul le champs FORME_ID est détecté comme étant une clé étrangère. CHAMPS_1_ID, CHAMPS_2_ID, et CHAMPS_3_ID ne sont pas détectés comme clés étrangères.
Apercu de la commande show columns from CHOIX; :
Est-ce que vous pouvez me dire ce qui cloche dans le code de création de la table CHOIX ci-dessous :+----------------------------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------------------+---------+------+-----+---------+----------------+
| CHOIX_ID | int(11) | NO | PRI | NULL | auto_increment |
| Donnees_Date_Start_Choisie | date | NO | | | |
| Donnees_Date_End_Choisie | date | NO | | | |
| FORME_ID | int(11) | NO | MUL | | |
| CHAMPS_1_ID | int(11) | NO | | | |
| CHAMPS_2_ID | int(11) | NO | | | |
| CHAMPS_3_ID | int(11) | NO | | | |
+----------------------------+---------+------+-----+---------+----------------+
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 create table CHOIX ( CHOIX_ID integer auto_increment, Donnees_Date_Start_Choisie date not null, Donnees_Date_End_Choisie date not null, FORME_ID integer not null, CHAMPS_1_ID integer not null, CHAMPS_2_ID integer not null, CHAMPS_3_ID integer not null, primary key (CHOIX_ID), INDEX (FORME_ID, CHAMPS_1_ID, CHAMPS_2_ID, CHAMPS_3_ID), CONSTRAINT FK_DONNEES FOREIGN KEY (FORME_ID, CHAMPS_1_ID, CHAMPS_2_ID, CHAMPS_3_ID) REFERENCES DONNEES (FORME_ID, CHAMPS_1_ID, CHAMPS_2_ID, CHAMPS_3_ID) ON DELETE CASCADE ) ENGINE = InnoDB;
Table DONNEES lié à la table CHOIX
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 create table DONNEES ( Donnees_Nom varchar(250) binary not null, Donnees_Date_Start date, Donnees_Date_End date, FORME_ID integer, CHAMPS_1_ID integer, CHAMPS_2_ID integer, CHAMPS_3_ID integer, FORME_CATEGORIE_ID integer not null, LOCAL_ID integer not null, primary key (FORME_ID,CHAMPS_1_ID,CHAMPS_2_ID,CHAMPS_3_ID), unique (Donnees_Nom), CONSTRAINT FK_FORME FOREIGN KEY (FORME_ID) REFERENCES FORME (FORME_ID) ON DELETE CASCADE, CONSTRAINT FK_CHAMPS_1 FOREIGN KEY (CHAMPS_1_ID) REFERENCES CHAMPS_1 (CHAMPS_1_ID) ON DELETE CASCADE, CONSTRAINT FK_CHAMPS_2 FOREIGN KEY (CHAMPS_2_ID) REFERENCES CHAMPS_2 (CHAMPS_2_ID) ON DELETE CASCADE, CONSTRAINT FK_CHAMPS_3 FOREIGN KEY (CHAMPS_3_ID) REFERENCES CHAMPS_3 (CHAMPS_3_ID) ON DELETE CASCADE, CONSTRAINT FK_FORME_CATEGORIEB FOREIGN KEY (FORME_CATEGORIE_ID) REFERENCES FORME_CATEGORIE (FORME_CATEGORIE_ID) ON DELETE CASCADE, CONSTRAINT FK_LOCAL FOREIGN KEY (LOCAL_ID) REFERENCES LOCAL (LOCAL_ID) ON DELETE CASCADE ) ENGINE = InnoDB;
Tables permettant la création de la table DONNEES :
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 create table FORME_CATEGORIE ( FORME_CATEGORIE_ID integer auto_increment, Forme_Categorie_Name varchar(2) binary not null, Forme_Categorie_Description varchar(250) binary, primary key (FORME_CATEGORIE_ID), unique (Forme_Categorie_Name) ) ENGINE = InnoDB; create table FORME ( FORME_ID integer auto_increment, Forme_Name varchar(2) binary not null, Forme_Description varchar(250) binary, FORME_CATEGORIE_ID integer not null, primary key (FORME_ID), unique (Forme_Name), INDEX (FORME_CATEGORIE_ID), CONSTRAINT FK_FORME_CATEGORIEA FOREIGN KEY (FORME_CATEGORIE_ID) REFERENCES FORME_CATEGORIE (FORME_CATEGORIE_ID) ON DELETE CASCADE ) ENGINE = InnoDB; create table LOCAL ( LOCAL_ID integer auto_increment, Local_Name varchar(2) binary not null, Local_Description varchar(250) binary, primary key (LOCAL_ID), unique (Local_Name) ) ENGINE = InnoDB; create table CHAMPS_1 ( CHAMPS_1_ID integer auto_increment, Champ1_Name varchar(2) binary not null, Champ1_Description varchar(250) binary, primary key (CHAMPS_1_ID), unique (Champ1_Name) ) ENGINE = InnoDB; create table CHAMPS_2 ( CHAMPS_2_ID integer auto_increment, Champ2_Name varchar(2) binary not null, Champ2_Description varchar(250) binary, primary key (CHAMPS_2_ID), unique (Champ2_Name) ) ENGINE = InnoDB; create table CHAMPS_3 ( CHAMPS_3_ID integer auto_increment, Champ3_Name varchar(2) binary not null, Champ3_Description varchar(250) binary, primary key (CHAMPS_3_ID), unique (Champ3_Name) ) ENGINE = InnoDB;
Partager