Sql-Server
使用什麼,CASCADE DELETE 規則或 ON DELETE 觸發器用於一對多約束?
我想問一下如何處理這種關係。為了更好地查看,我嘗試簡化並將我的情況轉換為我認為 StackOverflow 問題投票的方式(如果不是,抱歉:-)
我想用
CASCADE DELETE
規則添加一個約束,但是我不知道這種情況是否可行。另一種選擇是創建一個ON DELETE
觸發器,所以……我的問題是:
您更喜歡
CASCADE DELETE
約束規則(如果可能的話)還是ON DELETE
觸發器?或者您會以不同的方式為這個簡單的案例(想像一下 StackOverflow 的投票方案)創建一個數據庫模型嗎?
我為什麼要問:
我在某處讀到
CASCADE DELETE
約束規則在內部只不過是觸發器,而且這裡的一些人根本不喜歡約束規則。我知道,這個問題很模糊,但我想讓我的數據庫從不存在的關係記錄中清除。重要的是:
我正在創建應該能夠在 SQL Server 和 MySQL 數據庫引擎上執行的應用程序,但我猜兩者都應該支持所有
CASCADE DELETE
約束規則和ON DELETE
触發器。謝謝!
我認為您不會看到觸發器和使用級聯之間的性能差異。我更喜歡
ON CASCADE DELETE
只是因為在我看來它更好地描述了模型並揭示了創作者的意圖。foreign key
此外,如果您以後使用一個或另一個 ORM,如果它是通過約束而不是通過觸發器實現的,它將能夠在實體之間建立關係(當然,我說的是“數據優先”方法) 。
OP 已經在評論中提到了這一點,但重要的是要回答這個問題。
在 MySQL
ON DELETE CASCADE
中,不會在以這種方式刪除的子行上啟動任何觸發器。因此,如果您在子表上有任何觸發器,則最好在父表上使用 after delete 觸發器。