我打算用一些可能使问题无关紧要的前提条件来设置这个问题,但是这里有。
假设我的数据库有一种方法可以进行级联删除,而我不是要为可能的DB更改编写代码,而我的数据库模型是这样的,我总是想要一个特定的删除级联,在应用程序代码中管理这种级联删除是否有任何好处,而不是让数据库通过DDL进行管理?
在我看来,额外的代码,在那里“遗漏”的可能性,以及错过DB内置的自身功能优化的可能性(可能为零)都是比任何可能的增益更大的缺点。
我错过了什么吗?
答案 0 :(得分:3)
对我来说,DDL级联删除的最大好处是它可以自我维护。
想象一下这种情况:
TableB - - - - TableNew
/
TableA
\
TableC
使用级联删除添加TableNew
时,您无需添加任何代码来处理来自TableA 或 TableB的删除。
使用代码管理删除,您至少有两个位置可以添加新代码。
我通过代码管理删除的主要好处是:
1.它会阻止意外删除(谢谢外键违规!)
2.它可以处理以下场景,其中DDL通常不能。
TableB
/ \
TableA TableNew
\ /
TableC
答案 1 :(得分:0)
在我看来,关于删除的策略应该是模型的一部分,因此如果您在创建/设置数据库期间使用DDL定义它,则更好。