Sql-Server

使用什麼,CASCADE DELETE 規則或 ON DELETE 觸發器用於一對多約束?

  • April 9, 2012

我想問一下如何處理這種關係。為了更好地查看,我嘗試簡化並將我的情況轉換為我認為 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 已經在評論中提到了這一點,但重要的是要回答這個問題。

在 MySQLON DELETE CASCADE中,不會在以這種方式刪除的子行上啟動任何觸發器。因此,如果您在子表上有任何觸發器,則最好在父表上使用 after delete 觸發器。

引用自:https://dba.stackexchange.com/questions/16249