1
我試圖實現一個簡單的甲依賴於B在SQL關係將外鍵約束:簡單例子 - 上表aaaIsChildOf」可能會導致循環或多個級聯路徑
IF OBJECT_ID ('dbo.AdependsonB', 'U') IS NOT NULL
DROP TABLE dbo.AdependsonB;
IF OBJECT_ID ('dbo.aaaPerson', 'U') IS NOT NULL
DROP TABLE dbo.aaaPerson;
CREATE TABLE aaaPerson
(
[id] INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
[name] VARCHAR(40)
)
CREATE TABLE AdependsonB
(
[IsChildOf] INT NOT NULL,
[Parent] INT NOT NULL,
CONSTRAINT [pk_AdependsonB] PRIMARY KEY ([IsChildOf],[Parent]),
CONSTRAINT [CHK_identity] CHECK ([IsChildOf] <> [Parent]),
CONSTRAINT [FK_AdependsonB_IsChildOf-aaaPerson_id] FOREIGN KEY ([IsChildOf]) REFERENCES aaaPerson(id) ON DELETE CASCADE,
CONSTRAINT [FK_AdependsonB_Parent-aaaPerson_id] FOREIGN KEY ([Parent]) REFERENCES aaaPerson(id) ON DELETE CASCADE,
)
當運行這些行的代碼,我得到以下錯誤:
'上表aaaAdependsonB' 引入外來KEY constraint'FK_AdependsonB_Parent-aaaPerson_id可能導致循環或多個級聯路徑
當省略「ON DELETE CASCADE」的代碼運行完美無論是外鍵約束,但它不會是正確的語義。
任何人都可以提出建議,爲什麼和在這種情況下怎麼辦? 我已經閱讀了很多關於這個問題,但我不明白爲什麼沒有任何解決方法無法實現這樣一個簡單的關係。
提前感謝
相關:http://stackoverflow.com/questions/21243365/resolve-cycles-and-multiple-cascade-paths –
爲什麼子表需要IsChildOf和Parent?你能解釋這兩個不同嗎?父母真的是「頂級父母」嗎?而且不能把這種關係更簡單地表達出來 - 你應該始終能夠按照層次路徑到達最高層。您可能可以將所有這些信息放在一張表中。 –