|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : mai 2006 Messages : 10 ![]() |
Salut, voilà un descriptif de mon problème :
soit une table A3 qui sert de relation N-N entre deux tables A1 et A2, soit une table B2 qui sert de relation N-N entre une table B1 et A3 Donc : A3 possède une clé primaire composite A1+A2 B2 possède une clé primaire composite B1+A3 la question est : comment définir dans B2 qu'une partie de la clé primaire composite de B2 est elle-même composée d'une autre clé primaire composite (A3)? Le code de B2 ci-dessous ne fonctionne pas, qu'est-ce qui est faux? -------------------------Table A1------------------------- DROP TABLE IF EXISTS `A1`; CREATE TABLE `A1` ( `IdA1` int(10) unsigned NOT NULL auto_increment, PRIMARY KEY (`IdA1`), ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -------------------------Table A2------------------------- DROP TABLE IF EXISTS `A2`; CREATE TABLE `A2` ( `IdA2` int(10) unsigned NOT NULL auto_increment, PRIMARY KEY (`IdA2`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -------------------------Table A3------------------------- (pour relation N-N entre A1 et A2) ---------------------------------------------------------- DROP TABLE IF EXISTS `A3`; CREATE TABLE `A3` ( `IdA1` int(10) unsigned NOT NULL, `IdA2` int(10) unsigned NOT NULL, PRIMARY KEY (`IdA1`,`IdA2`), KEY `FK_A3_A1` (`IdA1`), KEY `FK_A3_A2` (`IdA2`), CONSTRAINT `FK_A3_A1` FOREIGN KEY (`IdA1`) REFERENCES `A1` (`IdA1`), CONSTRAINT `FK_A3_A2` FOREIGN KEY (`IdA2`) REFERENCES `A2` (`IdA2`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -------------------------Table B1------------------------- DROP TABLE IF EXISTS `B1`; CREATE TABLE `B1` ( `IdB1` int(10) unsigned NOT NULL auto_increment, PRIMARY KEY (`IdB1`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -------------------------Table B2------------------------- (pour relation N-N entre B1 et A3) ---------------------------------------------------------- DROP TABLE IF EXISTS `B2`; CREATE TABLE `B2` ( `IdB1` int(10) unsigned NOT NULL, `IdA3` int(10) unsigned NOT NULL, PRIMARY KEY (`IdB1`,`IdA3`), KEY `FK_B2_B1` (`IdB1`), KEY `FK_B2_A3` (`IdA3`), CONSTRAINT `FK_B2_B1` FOREIGN KEY (`IdB1`) REFERENCES `B1` (`IdB1`), CONSTRAINT `FK_B2_A3` FOREIGN KEY (`IdA3`) REFERENCES `A3` (`IdA1`,`IdA2`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; |
|
|
00
|
|
|
#2 | ||||
![]() Inscription : juillet 2002 Messages : 537 ![]() |
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. Code :
Et enfin, c'est normal que cela ne fonctionne pas. Tu dis "1 entier fait référence à 2 entiers" : Code :
(`IdA3`) REFERENCES `A3` (`IdA1`,`IdA2`) Code :
|
||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com