0

再会

我正在尝试解决三个表之间的外键关系问题。基本上我有两个辅助表,每个都有两个外键,每个外键都引用第三个表中的一个主键。

同样的问题发生在一个更大的数据库中,但是由于其复杂性、大小和可能的版权问题。我别无选择,只能隔离问题并创建一个会导致相同问题的副本。但是,如果您必须知道,引用主表的相同两个表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)

这是一个外键问题,但我不确定如何在不改变所涉及的表的当前结构的情况下解决它。

谢谢您的帮助。

4

1 回答 1

1

这看起来像是外键约束名称之间的名称冲突。约束名称在数据库中必须是唯一的,就像表名一样。

So just choose another name for the constraint EntryBy in the 3rd table. It will not affect any of the functionality you have.

于 2012-04-13T17:46:08.940 回答