我有用戶和郵政之間的1 .. *關係。 (一個用戶有很多文章)SQL Server 2008 - 多級聯FK - 我需要一個觸發器嗎?
郵政有一個FK稱爲「用戶ID」,其映射到「用戶ID」字段上用戶表。
我試圖設置此FK作爲級聯更新/刪除,但我得到這個錯誤:
'Users' table saved successfully 'Posts' table - Unable to create relationship 'FK_Posts_Users'.
Introducing FOREIGN KEY constraint 'FK_Posts_Users' on table 'Posts' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. Could not create constraint. See previous errors.
我有一個表叫PostHelpful。一篇文章有很多有用的。
有幫助有一個級聯FK用戶(所以當一個用戶被刪除,他們的幫助也被刪除)。
但我認爲這是「多重級聯路徑」的投訴原因。
因爲如果我刪除了一個用戶(當前),它會刪除他們的幫助。但即時通訊試圖添加一個cacade郵政也,它會刪除郵政,然後嘗試刪除有用的郵件(作爲有幫助也有級聯FK郵政)。在這種情況下,SQL選擇哪個級聯FK?
這裏是有問題的三個表的數據庫圖表:
正如你所看到的,「PostHelpful」是孩子既有「郵報」和「用戶」(具有FK的既)。
所以我不能讓兩個鍵級聯?我是否需要「用戶」(AFTER DELETE)上的觸發器來手動刪除幫助文件(和其他引用用戶的表)。
您已經發現問題以及如何解決問題。刪除User和PostHelpful之間的級聯刪除,在PostHelpful中添加一個觸發器給用戶'on delete'刪除。那麼你應該可以在User和Post之間添加級聯刪除。 – 2011-02-24 09:48:15
@Mikael Eriksson - 真的嗎?我的意思是它會工作,但我希望這是做錯事情的錯誤方式。觸發器不應該強制引用完整性。 – RPM1984 2011-02-24 11:05:47
嗯。從未將級聯刪除視爲參照完整性約束的一部分。更像是一種處理刪除的便捷方式。我可能不會使用觸發器或級聯刪除。我會編寫一個按正確順序刪除的存儲過程。 – 2011-02-24 11:12:32