Normal : regarde tes clés primaire : elles comportent bien les deux colonnes nécessaires, mais tu y as ajouté la clé étrangère dans la composition: c'est ça qui bloque les contraintes. : je viens de tester en local en les retirant et ça fonctionne parfaitement et j'ai pu créer les tables avec leurs contraintes du premier coup. Ton code ajusté donne ceci :
-- mysql> SHOW CREATE TABLE `modules`\G
CREATE TABLE `modules` (
`idmodule` bigint(20) unsigned NOT NULL auto_increment,
`nommodule` varchar(45) default NULL,
PRIMARY KEY (`idmodule`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- mysql> SHOW CREATE TABLE `chapitres`\G
CREATE TABLE `chapitres` (
`idchapitre` bigint(20) unsigned NOT NULL auto_increment,
`idmodule` bigint(20) unsigned default NULL,
`rankchapitre` int(10) unsigned NOT NULL default '0',
`nomchapitre` text,
PRIMARY KEY (`idchapitre`,`rankchapitre`),
KEY `idmodule` (`idmodule`),
KEY `idchapitre` (`idchapitre`),
KEY `rankchapitre` (`rankchapitre`),
CONSTRAINT `chapitres_ibfk_1`
FOREIGN KEY (`idmodule`)
REFERENCES `modules` (`idmodule`)
ON DELETE SET NULL
ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- mysql> SHOW CREATE TABLE `sequences`\G
CREATE TABLE `sequences` (
`idsequence` bigint(20) unsigned NOT NULL auto_increment,
`idchapitre` bigint(20) unsigned default NULL,
`ranksequence` int(10) unsigned NOT NULL default '0',
`nomsequence` text,
PRIMARY KEY (`idsequence`,`ranksequence`),
KEY `idchapitre` (`idchapitre`),
KEY `idsequence` (`idsequence`),
KEY `ranksequence` (`ranksequence`),
CONSTRAINT `sequences_ibfk_1`
FOREIGN KEY (`idchapitre`)
REFERENCES `chapitres` (`idchapitre`)
ON DELETE SET NULL
ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- mysql> SHOW CREATE TABLE `briques`\G
CREATE TABLE `briques` (
`idbrique` bigint(20) unsigned NOT NULL auto_increment,
`idsequence` bigint(20) unsigned default NULL,
`rankbrique` int(10) unsigned NOT NULL default '0',
`nombrique` text,
PRIMARY KEY (`idbrique`,`rankbrique`),
KEY `idsequence` (`idsequence`),
KEY `idbrique` (`idbrique`),
KEY `rankbrique` (`rankbrique`),
CONSTRAINT `briques_ibfk_1`
FOREIGN KEY (`idsequence`)
REFERENCES `sequences` (`idsequence`)
ON DELETE SET NULL
ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Note : en fait j'ai compris : regarde plus attentivement les croquis que j'ai fait plus tôt : certaines colonnes sont marquées « PK » (primary Key) mais d'autres sont notées « FK » (Foreign Key) et je crois que c'est ce détail que tu n'avais pas relevé qui t'a conduit à les inclure dans la PK.
______________________________________________________________
Une question bien formulée, c'est un problème bien compris : ça représente déjà les 3/4 de la réponse ;)
Edited 1 time(s). Last edit at 08/17/2010 10:42PM by Jean Molliné.