2013-05-16 62 views
1

下面是該方案不能上刪除級聯創建外鍵約束前面已經有一個

  • Table1Id, Name

  • Table2Id, Name1, Name2, Type

    • FK1Name1參考Table1.NameOn delete cascade
    • FK2Name2引用Table1.NameOn delete cascade

FK2拋出下面的錯誤

錯誤:

Introducing FOREIGN KEY constraint FK2 on table Table2 may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.

但是,在我的情況是否符合Name1或實體被刪除,Table2中的相應條目應被刪除。

請幫我理解這可能導致什麼問題?

+0

你的例子正確嗎? (表名,列名) – Tomasito

+0

[外鍵約束可能導致循環或多個級聯路徑?](http://stackoverflow.com/questions/851625/foreign-key-constraint-may-cause-cycles-or -multiple-cascade-paths) –

+0

我的例子是正確的。我已經經歷了其他問題。我想知道我的情況如何解決。 – passionatedeveloper

回答

2

FK2不會導致週期,但會導致多個級聯路徑。從Table2中刪除的記錄將導致Table1中的行被刪除兩次,每個刪除標記爲級聯的外鍵都會刪除一次。這是設計不允許的。就像你問得到的回答here

的一個問題。「通過一個單一的刪除或更新必須形成不包含循環引用的樹。觸發的一系列級聯引用操作無表可在出現超過一次由DELETE或UPDATE產生的所有級聯參照動作的列表此外,級聯參照動作的樹不得有多於一條指向任何指定表的路徑樹的任何分支在遇到表NO ACTION已被指定或是默認值。「取自MSDN Library

+0

這是我認爲會發生的事情。刪除Table1中的條目將導致表Table2中的相應記錄被刪除。這將如何引發問題? – passionatedeveloper

+0

當Name1和Name2包含相同的值時會出現問題。從表1中刪除名稱後,將有2條路徑到達相同的刪除。這是錯誤中引用的「多個級聯路徑」出現的位置。上面代碼段中的第二句引用了這一點,Microsoft不會允許它。 – whobetter

+0

@passionatedeveloper:如果您的問題已被解答,請將其標記爲這樣。 – whobetter