Bonjour, j'utilise mysql workbench pour créer mon schéma entité relation et générer mon script SQL. Je souhaite créer une relation n-n entre la même table. Ma table est une table 'application' avec en clés primaires 'id' et 'version'. Je crée alors une autre table 'appli_compatible' avec en clés primaires 'id_appli_1', 'version_appli_1' et 'id_appli_2', 'version_appli_2' qui référencent respectivement 'id' et 'version' de ma table 'application'.
Problème : dans PhpMyadmin quand j'exécute le code SQL généré, j'ai une erreur 150, donc une erreur liée à une clé étrangère, hors j'ai vérifié le code et tout semble correcte.
Auriez-vous une idée ? MySQL interdit-il cette façon de faire ?
Voici le code de mes deux tables
et
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 -- ----------------------------------------------------- -- Table `admin_flasheurs`.`application` -- ----------------------------------------------------- DROP TABLE IF EXISTS `admin_flasheurs`.`application` ; CREATE TABLE IF NOT EXISTS `admin_flasheurs`.`application` ( `id_application` INT NOT NULL , `lib_application` VARCHAR(45) CHARACTER SET 'latin1' COLLATE 'latin1_swedish_ci' NOT NULL COMMENT 'Le libellé de l\'application.' , `version_application` VARCHAR(10) CHARACTER SET 'latin1' COLLATE 'latin1_swedish_ci' NOT NULL COMMENT 'La version de l\'application' , `mod_application` DATETIME NULL COMMENT 'Date de la dernière modification de l\'application.' , `chemin_serveur_application` VARCHAR(100) CHARACTER SET 'latin1' COLLATE 'latin1_swedish_ci' NULL COMMENT 'Le chemin des fichiers de l\'application sur le serveur.' , `chemin_flasheur_application` VARCHAR(100) CHARACTER SET 'latin1' COLLATE 'latin1_swedish_ci' NULL COMMENT 'Le chemin des fichiers de l\'application sur le flasheur.' , `type_application_id_type_application` CHAR(2) CHARACTER SET 'latin1' COLLATE 'latin1_swedish_ci' NULL , `etat_id_etat` CHAR(2) NULL , PRIMARY KEY (`version_application`, `id_application`) , CONSTRAINT `fk_application_type_application` FOREIGN KEY (`type_application_id_type_application` ) REFERENCES `admin_flasheurs`.`type_application` (`id_type_application` ) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_application_etat` FOREIGN KEY (`etat_id_etat` ) REFERENCES `admin_flasheurs`.`etat` (`id_etat` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB DEFAULT CHARACTER SET = latin1 COLLATE = latin1_swedish_ci; CREATE INDEX `fk_application_type_application` ON `admin_flasheurs`.`application` (`type_application_id_type_application` ASC) ; CREATE INDEX `fk_application_etat` ON `admin_flasheurs`.`application` (`etat_id_etat` ASC) ;
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 -- ----------------------------------------------------- -- Table `admin_flasheurs`.`compatible` -- ----------------------------------------------------- DROP TABLE IF EXISTS `admin_flasheurs`.`compatible` ; CREATE TABLE IF NOT EXISTS `admin_flasheurs`.`compatible` ( `id_compatible` INT NOT NULL COMMENT 'Libellé de l\'application mère (application ou socle) compatible aves le ou les applications filles (socle ou matériel).' , `version_compatible` VARCHAR(10) CHARACTER SET 'latin1' COLLATE 'latin1_swedish_ci' NOT NULL COMMENT 'Version de l\'application mère (application ou socle) compatible aves le ou les applications filles (socle ou matériel).' , `application_version_application` VARCHAR(10) CHARACTER SET 'latin1' COLLATE 'latin1_swedish_ci' NOT NULL , `application_id_application` INT NOT NULL , PRIMARY KEY (`id_compatible`, `version_compatible`, `application_version_application`, `application_id_application`) , CONSTRAINT `fk_compatible_application` FOREIGN KEY (`application_version_application` , `application_id_application` ) REFERENCES `admin_flasheurs`.`application` (`version_application` , `id_application` ) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_compatible_application2` FOREIGN KEY (`id_compatible` , `version_compatible` ) REFERENCES `admin_flasheurs`.`application` (`id_application` , `version_application` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB DEFAULT CHARACTER SET = latin1 COLLATE = latin1_swedish_ci COMMENT = 'Liste des compatibilité des applications'; CREATE INDEX `fk_compatible_application` ON `admin_flasheurs`.`compatible` (`application_version_application` ASC, `application_id_application` ASC) ; CREATE INDEX `fk_compatible_application2` ON `admin_flasheurs`.`compatible` (`id_compatible` ASC, `version_compatible` ASC) ;
Partager