Salut,
Tout d'abord, petite remarque concernant tes index : tu en as qui sont complètement inutiles. Cela ne sert à rien de rajouter des index pour les colonnes qui sont déjà préfixes d'un autre index.
1 2
| PRIMARY KEY (`IdA1`,`IdA2`),
KEY `FK_A3_A1` (`IdA1`) ==> ne sert à rien |
Ensuite, pense aux balises CODE la prochaine fois, c'est plus clair pour ceux qui lisent ton message
Et enfin, c'est normal que cela ne fonctionne pas. Tu dis "1 entier fait référence à 2 entiers" :
(`IdA3`) REFERENCES `A3` (`IdA1`,`IdA2`)
Tu as deux solutions : soit tu introduits dans A3 un identifiant "artificiel" qui sera repris dans B2. Soit dans B2, tu stockes les deux parties de la clé de A3.
1 2 3 4 5 6 7 8 9 10
| DROP TABLE IF EXISTS `B2`;
CREATE TABLE `B2` (
`IdB1` int(10) unsigned NOT NULL,
`IdA1A3` int(10) unsigned NOT NULL,
`IdA2A3` int(10) unsigned NOT NULL,
PRIMARY KEY (`IdB1`,`IdA1A3`, `IdA2A3`),
KEY `FK_B2_A3` (`IdA1A3`, `IdA2A3`),
CONSTRAINT `FK_B2_B1` FOREIGN KEY (`IdB1`) REFERENCES `B1` (`IdB1`),
CONSTRAINT `FK_B2_A3` FOREIGN KEY (`IdA1A3`, `IdA2A3`) REFERENCES `A3` (`IdA1`,`IdA2`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1; |
Partager