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
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) ;
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
 
-- -----------------------------------------------------
-- 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) ;