2012-04-13 95 views
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) 

這是一個外鍵問題,但我不確定如何修改它的表格或表格的當前結構。

感謝您的幫助。

+1

可能重複的 sarwar026 2012-04-13 17:44:02

+1

@ sarwar026:謝謝。它提供了一個新的MySql命令,這對於將來的參考很有用。 – 2012-04-13 17:51:01

回答

1

這看起來像外鍵約束名之間的名稱衝突。約束名稱在數據庫中必須是唯一的,例如表名。

所以才選擇另一個名字在第三表上的約束EntryBy。它不會影響你的任何功能。

+0

我的印象中,約束名稱必須是唯一的一個表中,而不是在整個數據庫。現在就解釋這一切。謝謝。此解決方法將無縫工作。 – 2012-04-13 17:49:11

相關問題