2014-05-04 39 views
0

我有手工編碼的數據庫模式(其中一部分如下所示):將外鍵約束上表「FK__Employer__postal__59FA5E80」'僱主可能會導致循環或多個級聯路徑

CREATE TABLE Employer 
(
    id INTEGER NOT NULL PRIMARY KEY, 
    industry_sector_id INTEGER 
     REFERENCES IndustrySector(id) ON UPDATE CASCADE ON DELETE NO ACTION, 
    name VARCHAR(256) NOT NULL, 
    legal_entity_type_id INTEGER 
     REFERENCES LegalEntityType(id) ON UPDATE CASCADE ON DELETE NO ACTION, 
    size_category_id INTEGER 
     REFERENCES EmployerStaffSizeCategory(id) ON UPDATE CASCADE ON DELETE NO ACTION, 
    location_address INTEGER 
     REFERENCES ResidentialAddress(id) ON UPDATE CASCADE ON DELETE NO ACTION, 
    postal_address INTEGER 
     REFERENCES PostalAddress(id) ON UPDATE CASCADE ON DELETE NO ACTION 
); 

CREATE UNIQUE INDEX idxu_employer_name ON Employer(name); 
CREATE INDEX idx_employer_industry ON Employer(industry_sector_id); 

當我執行查詢SSMS中,我得到了以下錯誤消息:

消息1785,級別16,狀態0,行714
引進國外KEY約束表「僱主」 FK__Employer__postal__59FA5E80'可能會導致循環或多個級聯路徑。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY約束。
消息1750,級別16,狀態0,行714
無法創建約束。查看以前的錯誤。

我看不出SQL語句出了什麼問題(它在PostgreSQL中運行良好[稍微修改了一下,對於mySQL])。任何人都可以指出我得到的錯誤信息的原因是什麼 - 我的意思是哪個FK導致衝突,爲什麼?

回答

0

這是FK引用PostalAddress表引起的錯誤。似乎有對ResidentialAddressPostalAddress表中的同一個表的引用。

有關於這裏這個錯誤Microsoft知識庫中相應的文章:

http://support.microsoft.com/kb/321843

+0

是啊,我想通了,這是'postal_address'領域造成的問題,更仔細地分析錯誤消息後。感謝您指出這兩個表都可能引用同一個第三個表 - 事實就是如此。我會相應地修改我的Schema。只要SO允許,我會盡快接受你的回答。 –

相關問題