Bonsoir,

Dans le cas, ou les différentes tables sont crées de cette manière :
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
/*Création de la table tChannel*/
CREATE TABLE `tChannel` (
  `channel_i_id` INTEGER(2) UNSIGNED NOT NULL,	/*l'identifiant du canal*/
  `channel_s_label` VARCHAR(100) NOT NULL default '',	/*le libellé du canal : MMS, GP ou Services*/	
  PRIMARY KEY  (`channel_i_id`)
) TYPE=InnoDB;
 
/*Insertion dans la table tChannel*/
INSERT INTO tChannel (`channel_i_id`, `channel_s_label`) VALUES (1, 'MMS');
INSERT INTO tChannel (`channel_i_id`, `channel_s_label`) VALUES (2, 'GP');
INSERT INTO tChannel (`channel_i_id`, `channel_s_label`) VALUES (3, 'Services');
 
 
/*Création de la table tService*/
CREATE TABLE `tService` (
  `service_i_id` INTEGER(3) UNSIGNED NOT NULL,	/*l'identifiant du service demandeur*/
  `service_s_label` VARCHAR(255) NOT NULL,	/*libellé du service demandeur*/
  `service_s_client_login` VARCHAR(255) NOT NULL,	/*l'identifiant côté client*/
  `service_s_client_password` VARCHAR(255) NOT NULL,	/*le mot de passe côté client*/
  PRIMARY KEY  (`service_i_id`),
  UNIQUE KEY (`service_s_client_login`)
) TYPE=InnoDB;
 
-- Service demandeur mock, nécessaire pour le referencement de la clé étrangère de tSource
INSERT INTO tService (`service_i_id`, `service_s_label`, `service_s_client_login`, `service_s_client_password`) VALUES (0, 'Dummy Service', '', '');
INSERT INTO tService (`service_i_id`, `service_s_label`, `service_s_client_login`, `service_s_client_password`) VALUES (1, 'Messagerie SFR', 'sfrmes', 'test');
 
/*Création de la table tSource*/
CREATE TABLE `tSource` (
  `source_i_id` INTEGER(3) UNSIGNED NOT NULL,	/*l'identifiant de la source*/
  `channel_i_id` INTEGER(2) NOT NULL,	/*clé étrangère(channel)*/
  `service_i_id` INTEGER(3) NOT NULL,	/*pas une clé étrangère. Peut prendre la valeur vide (pour channel_i_id appartenant à {1;2} c'est à dire pour MMS et GP*/
  `source_s_label` VARCHAR(255) NOT NULL,	/*le libellé de la source : MMS, GP ou libelle du service demandeur*/
  PRIMARY KEY  (`source_i_id`)
  /*FOREIGN KEY(channel_i_id) REFERENCES tChannel(channel_i_id),
  FOREIGN KEY(service_i_id) REFERENCES tService(service_i_id) */
) TYPE=InnoDB;
J'obtiens :
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
mysql> source mdd.sql
Query OK, 0 rows affected (0.03 sec)
 
Query OK, 1 row affected (0.00 sec)
 
Query OK, 1 row affected (0.01 sec)
 
Query OK, 1 row affected (0.00 sec)
 
Query OK, 0 rows affected (0.02 sec)
 
Query OK, 1 row affected (0.01 sec)
 
Query OK, 1 row affected (0.00 sec)
 
Query OK, 0 rows affected (0.03 sec)
Tandis que lorsque j'introduit des clés étrangères dans la table tSource, ça ne fonctionne plus :
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
/*Création de la table tChannel*/
CREATE TABLE `tChannel` (
  `channel_i_id` INTEGER(2) UNSIGNED NOT NULL,	/*l'identifiant du canal*/
  `channel_s_label` VARCHAR(100) NOT NULL default '',	/*le libellé du canal : MMS, GP ou Services*/	
  PRIMARY KEY  (`channel_i_id`)
) TYPE=InnoDB;
 
/*Insertion dans la table tChannel*/
INSERT INTO tChannel (`channel_i_id`, `channel_s_label`) VALUES (1, 'MMS');
INSERT INTO tChannel (`channel_i_id`, `channel_s_label`) VALUES (2, 'GP');
INSERT INTO tChannel (`channel_i_id`, `channel_s_label`) VALUES (3, 'Services');
 
 
/*Création de la table tService*/
CREATE TABLE `tService` (
  `service_i_id` INTEGER(3) UNSIGNED NOT NULL,	/*l'identifiant du service demandeur*/
  `service_s_label` VARCHAR(255) NOT NULL,	/*libellé du service demandeur*/
  `service_s_client_login` VARCHAR(255) NOT NULL,	/*l'identifiant côté client*/
  `service_s_client_password` VARCHAR(255) NOT NULL,	/*le mot de passe côté client*/
  PRIMARY KEY  (`service_i_id`),
  UNIQUE KEY (`service_s_client_login`)
) TYPE=InnoDB;
 
-- Service demandeur mock, nécessaire pour le referencement de la clé étrangère de tSource
INSERT INTO tService (`service_i_id`, `service_s_label`, `service_s_client_login`, `service_s_client_password`) VALUES (0, 'Dummy Service', '', '');
INSERT INTO tService (`service_i_id`, `service_s_label`, `service_s_client_login`, `service_s_client_password`) VALUES (1, 'Messagerie SFR', 'sfrmes', 'test');
 
/*Création de la table tSource*/
CREATE TABLE `tSource` (
  `source_i_id` INTEGER(3) UNSIGNED NOT NULL,	/*l'identifiant de la source*/
  `channel_i_id` INTEGER(2) NOT NULL,	/*clé étrangère(channel)*/
  `service_i_id` INTEGER(3) NOT NULL,	/*clé étrangère(service)*/
  `source_s_label` VARCHAR(255) NOT NULL,	/*le libellé de la source : MMS, GP ou libelle du service demandeur*/
  PRIMARY KEY  (`source_i_id`),
  FOREIGN KEY(channel_i_id) REFERENCES tChannel(channel_i_id),
  FOREIGN KEY(service_i_id) REFERENCES tService(service_i_id)
) TYPE=InnoDB;
J'obtiens :
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
mysql> source mdd.sql
Query OK, 0 rows affected (0.03 sec)
 
Query OK, 1 row affected (0.00 sec)
 
Query OK, 1 row affected (0.01 sec)
 
Query OK, 1 row affected (0.00 sec)
 
Query OK, 0 rows affected (0.04 sec)
 
Query OK, 1 row affected (0.00 sec)
 
Query OK, 1 row affected (0.00 sec)
 
ERROR 1005: Can't create table 'tSource.frm' (errno: 150)
J'ai une version Mysql 4.
Est-ce que quelqu'un pourrait m'indiquer comment faire en sorte que cette erreur ne soit plus présente avec ma version MySQL 4.

Merci