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; :
+----------------------------+---------+------+-----+---------+----------------+
| 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 | | | |
+----------------------------+---------+------+-----+---------+----------------+
Est-ce que vous pouvez me dire ce qui cloche dans le code de création de la table CHOIX ci-dessous :
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;