我有手工編碼的數據庫模式(其中一部分如下所示):將外鍵約束上表「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導致衝突,爲什麼?
是啊,我想通了,這是'postal_address'領域造成的問題,更仔細地分析錯誤消息後。感謝您指出這兩個表都可能引用同一個第三個表 - 事實就是如此。我會相應地修改我的Schema。只要SO允許,我會盡快接受你的回答。 –