Sql 在代码中而不是在数据库中管理级联删除有什么真正的优势吗?

Sql 在代码中而不是在数据库中管理级联删除有什么真正的优势吗?,sql,cascading-deletes,Sql,Cascading Deletes,我将用一些前提条件来设置这个问题,这些前提条件可能会使这个问题变得无关紧要,但现在开始 假设我的数据库有一种级联删除的方法,并且我没有尝试为数据库的可能更改编写代码,并且我的数据库模型总是希望级联一个特定的删除,那么在应用程序代码中管理这个级联删除而不是让数据库通过DDL来做有什么好处吗 在我看来,额外的代码、“遗漏”的可能性,以及(可能为零)遗漏DB对其自身特性的内置优化的可能性,都是比任何可能的收益更大的缺点 我遗漏了什么吗?在我看来,关于删除的策略应该是模型的一部分,因为这个原因,如果在创

我将用一些前提条件来设置这个问题,这些前提条件可能会使这个问题变得无关紧要,但现在开始

假设我的数据库有一种级联删除的方法,并且我没有尝试为数据库的可能更改编写代码,并且我的数据库模型总是希望级联一个特定的删除,那么在应用程序代码中管理这个级联删除而不是让数据库通过DDL来做有什么好处吗

在我看来,额外的代码、“遗漏”的可能性,以及(可能为零)遗漏DB对其自身特性的内置优化的可能性,都是比任何可能的收益更大的缺点


我遗漏了什么吗?

在我看来,关于删除的策略应该是模型的一部分,因为这个原因,如果在创建/设置数据库的过程中使用DDL来定义它会更好。

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

想象一下这个场景:

          TableB - - - - TableNew
         /
   TableA
         \
          TableC
添加
TableNew
时,通过级联删除,不需要添加任何代码来处理TableA或TableB中的删除

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


我发现通过代码管理删除的主要好处是:
1.它会停止意外删除(感谢您违反外键!)
2.它可以处理以下场景,DDL通常无法处理这些场景

          TableB
         /      \ 
   TableA        TableNew
         \      /
          TableC