每个表有四个外键不能引用主表中的单个主键
问题描述:
美好的一天每个表有四个外键不能引用主表中的单个主键
我试图解决三个表之间的外键关系问题。基本上我有两个次表,每一个都有两个外键和每个外键是参照在第三表中的单个主键。
同样的问题发生在一个更大的数据库,但由于其复杂性,规模和可能的版权问题。我只好找出问题,并创建一个副本会导致同样的问题。但是,如果你一定要知道,引用主表People
相同的两个表只是两个数十个同种有问题的数据库的宇宙。
我的希望是有人可以指出问题,也许提供的解决方案不会影响当前的结构,所以我可以自己将它应用到所有其他表,因为从我看到的数据库它可能会遭受同样的问题。数据库的作者是不是我的,仅看图表时,增加一个人的困惑。
的SQL脚本创建:
CREATE SCHEMA IF NOT EXISTS `sampleBD` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
USE `sampleBD` ;
-- -----------------------------------------------------
-- Table `sampleBD`.`People`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `sampleBD`.`People` (
`PeopleID` INT NOT NULL AUTO_INCREMENT ,
`Name` VARCHAR(200) NOT NULL ,
`EntryDate` DATETIME NULL ,
`EntryBy` INT NULL ,
PRIMARY KEY (`PeopleID`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `sampleBD`.`PeopleNumberId`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `sampleBD`.`PeopleNumberId` (
`PeopleNumberIdID` INT NOT NULL AUTO_INCREMENT ,
`PeopleID` INT NOT NULL ,
`NumberId` INT(11) NOT NULL ,
`EntryDate` DATETIME NULL ,
`EntryBy` INT NULL ,
PRIMARY KEY (`PeopleNumberIdID`) ,
INDEX `PeopleID` (`PeopleID` ASC) ,
INDEX `EntryBy` (`EntryBy` ASC) ,
CONSTRAINT `PeopleID`
FOREIGN KEY (`PeopleID`)
REFERENCES `sampleBD`.`People` (`PeopleID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `EntryBy`
FOREIGN KEY (`EntryBy`)
REFERENCES `sampleBD`.`People` (`PeopleID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `sampleBD`.`PeopleCbi`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `sampleBD`.`PeopleCbi` (
`PeopleCbiID` INT NOT NULL AUTO_INCREMENT ,
`PeopleID` INT NOT NULL ,
`Cbi` INT NOT NULL ,
`EntryDate` DATETIME NULL ,
`EntryBy` INT NULL ,
PRIMARY KEY (`PeopleCbiID`) ,
INDEX `PessoaID` (`PeopleID` ASC) ,
INDEX `EntryBy` (`EntryBy` ASC) ,
CONSTRAINT `PessoaID`
FOREIGN KEY (`PeopleID`)
REFERENCES `sampleBD`.`People` (`PeopleID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `EntryBy`
FOREIGN KEY (`EntryBy`)
REFERENCES `sampleBD`.`People` (`PeopleID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
脚本能够创建第一和第二表,但是当它到达第三个表则返回错误代码。
Error Code: 1005. Can't create table 'samplebd.peoplecbi' (errno: 121)
这是一个外键问题,但我不确定如何修改它的表格或表格的当前结构。
感谢您的帮助。
答
这看起来像外键约束名之间的名称冲突。约束名称在数据库中必须是唯一的,例如表名。
所以才选择另一个名字在第三表上的约束EntryBy
。它不会影响你的任何功能。
+0
我的印象中,约束名称必须是唯一的一个表中,而不是在整个数据库。现在就解释这一切。谢谢。此解决方法将无缝工作。 – 2012-04-13 17:49:11
可能重复的 –
sarwar026
2012-04-13 17:44:02
@ sarwar026:谢谢。它提供了一个新的MySql命令,这对于将来的参考很有用。 – 2012-04-13 17:51:01