1
在我的數據庫中,我有許多可以相互關聯的對象。級聯刪除一個可以與自己相關的對象
這很好,直到我決定要刪除這些對象。由於關係記錄,我需要實現級聯刪除以防止引發異常。
當關系兩邊的對象被刪除時,我想要關聯記錄也被刪除。我想創建一個數據庫結構,看起來像這樣:
CREATE TABLE [MyObject]
(
[ID] [int] IDENTITY PRIMARY KEY,
...
);
CREATE TABLE [MyObjectRelation]
(
[ID] [int] IDENTITY PRIMARY KEY,
[MyObjectID] [int] FOREIGN KEY REFERENCES [MyObject] ([ID]) ON DELETE CASCADE,
[RelatedMyObjectID] [int] FOREIGN KEY REFERENCES [MyObject] ([ID]) ON DELETE CASCADE
)
但是,每當我試圖在我的數據庫運行此,我收到此錯誤信息:
引進國外KEY約束」。 ..'表'MyObjectRelation'可能會導致循環或多個級聯路徑。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY約束。
我已閱讀關於此的文檔,但我不明白這種佈局會如何導致循環。當然,我完全有可能誤解了MSDN上的級聯刪除文檔,而上面的數據庫佈局不會達到我想要的。
我會很有興趣聽到我能做些什麼來實現我想要的行爲。
錯誤消息並未傳達它將投訴的全部情況。文檔確實說「由單個DELETE或UPDATE觸發的一系列級聯引用操作必須形成一個*樹*,其中不包含循環引用。*所有級聯引用操作的列表中不能出現多次表格刪除或更新。*「 – AakashM 2011-02-03 10:31:26