管理代码而不是数据库中的级联删除是否有任何真正的优势?

时间:2012-01-13 13:09:31

标签: sql cascading-deletes

我打算用一些可能使问题无关紧要的前提条件来设置这个问题,但是这里有。

假设我的数据库有一种方法可以进行级联删除,而我不是要为可能的DB更改编写代码,而我的数据库模型是这样的,我总是想要一个特定的删除级联,在应用程序代码中管理这种级联删除是否有任何好处,而不是让数据库通过DDL进行管理?

在我看来,额外的代码,在那里“遗漏”的可能性,以及错过DB内置的自身功能优化的可能性(可能为零)都是比任何可能的增益更大的缺点。

我错过了什么吗?

2 个答案:

答案 0 :(得分:3)

对我来说,DDL级联删除的最大好处是它可以自我维护。

想象一下这种情况:

          TableB - - - - TableNew
         /
   TableA
         \
          TableC

使用级联删除添加TableNew时,您无需添加任何代码来处理来自TableA TableB的删除。

使用代码管理删除,您至少有两个位置可以添加新代码。


我通过代码管理删除的主要好处是:
1.它会阻止意外删除(谢谢外键违规!)
2.它可以处理以下场景,其中DDL通常不能。

          TableB
         /      \ 
   TableA        TableNew
         \      /
          TableC

答案 1 :(得分:0)

在我看来,关于删除的策略应该是模型的一部分,因此如果您在创建/设置数据库期间使用DDL定义它,则更好。