Bonjour à tous,
Depuis ce matin je m'arrache les cheveux sur le problème suivant :
J'ai 2 Tables :
La première collecte les données des charges d'un site client, comprendre Charge au sens comptable. Voici sa DDL :
Celle-ci est reliée à sa table correspondante pour gérer les charges par des devis. Voici sa DDL :
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 CREATE TABLE `cus_sit_cha` ( `cus_sit_ide` VARCHAR(45) NOT NULL COMMENT 'Identifiant du site client', `cus_ide` INT(11) NOT NULL COMMENT 'Identifiant du client', ... `cus_sit_cha_des` VARCHAR(250) NOT NULL COMMENT 'Description de la charge', `cat_ide` VARCHAR(255) NOT NULL DEFAULT '' COMMENT 'Id. catalogue', ... ..... `cus_sit_cha_deb` DATE NOT NULL COMMENT 'Date de debut d\'utilisation de la charge ', `cus_sit_cha_fin` DATE NOT NULL COMMENT 'Date de fin d\'utilisation de la charge', `cus_sit_cha_ter` TINYINT(4) UNSIGNED NOT NULL DEFAULT '', ... ... `cus_sit_cha_per` TINYINT(4) UNSIGNED NOT NULL DEFAULT '', PRIMARY KEY (`cus_sit_ide`, `cus_ide`, `cus_swi_ide`, `cat_ide`, `cus_sit_cha_deb`), INDEX `idx_sel_cha` (`cus_ide`), INDEX `cat_cus_sit_cha` (`cat_ide`), CONSTRAINT `cat_cus_sit_cha` FOREIGN KEY (`cat_ide`) REFERENCES `cat` (`cat_ide`) ON UPDATE CASCADE, CONSTRAINT `cus_sit_cus_sit_cha` FOREIGN KEY (`cus_sit_ide`, `cus_ide`, `cus_swi_ide`) REFERENCES `cus_sit` (`cus_sit_ide`, `cus_ide`, `cus_swi_ide`) ON UPDATE CASCADE) COMMENT='Charges rattachées au site géographique du client' COLLATE='latin1_swedish_ci' ENGINE=InnoDB ;
Au passage, vous aurez compris qu'il y a des champs clé primaire composites. La réflexion est la suivante : une charge d'un site client peut passer par un devis donc dans ce cas, l'ID de la charge est recopié dans la table des devis. Mais il se peut que la charge soit facturée directement, donc elle ne sera pas recopiée dans la table correspondante. IL ME FAUT DONC UNE RELATION DE 1 , 1 à 0 , 1 !!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 CREATE TABLE `cus_sit_cha_devis` ( `cus_sit_ide` VARCHAR(45) NOT NULL COMMENT 'Identifiant du site client', `cus_ide` INT(11) NOT NULL COMMENT 'Identifiant du client', `cat_ide` VARCHAR(255) NOT NULL DEFAULT '' COMMENT 'Id. catalogue', `cha_deb` DATE NOT NULL COMMENT 'Date de debut d\'utilisation de la charge ', `cus_sit_ide_devis` VARCHAR(45) NOT NULL, ... `author_ide` INT(11) NOT NULL, PRIMARY KEY (`cus_ide`, `cus_sit_ide`, `cat_ide`, `cha_deb`), CONSTRAINT `cus_sit_cha_devis_author_fk_cus` FOREIGN KEY (`author_ide`) REFERENCES `cus` (`cus_ide`) ON UPDATE CASCADE ON DELETE CASCADE ) COLLATE='latin1_swedish_ci' ENGINE=InnoDB ;
Je veux relier ces 2 deux tables par une relation de (de cus_sit_cha)1,1 ==> (vers cus_sit_cha_devis) 0,1
Et depuis ce matin j'essaie de créer la contrainte suivante :
Mais à l'exécution de cette requête, j'ai le warning suivant qui s'affiche :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 ALTER TABLE `cus_sit_cha_devis` ADD CONSTRAINT `cus_sit_cha_cus_sit_cha_devis` FOREIGN KEY (`cus_sit_ide`, `cus_ide`, `cat_ide`, `cha_deb`) REFERENCES `cus_sit_cha` (`cus_sit_ide`, `cus_ide`, `cat_ide`, `cus_sit_cha_deb`) ON UPDATE CASCADE ON DELETE CASCADE;
"Warning"
"150"
"Alter table '`Mydatabase`.`cus_sit_cha_devis`' with foreign key constraint failed. There is no index in the referenced table where the referenced columns appear as the first columns near ' FOREIGN KEY (`cus_sit_ide`, `cus_ide`, `cat_ide`, `cha_deb`) REFERENCES `cus_sit_cha` (`cus_sit_ide`, `cus_ide`, `cat_ide`, `cus_sit_cha_deb`)'.
Pour information, je suis sousComment faire aboutir la créatoin de cette relation ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part 10.2.10-MariaDB-10.2.10+maria~jessie
Merci à tous ceux qui se pencheront sur mon problème.
Partager