跟进[删除(级联/限制)]和更新(级联/限制)

时间:2010-09-26 14:48:55

标签: database cascading-deletes

我想知道何时实际使用删除级联或删除限制和更新级联或更新限制。我很困惑使用它们或在我的数据库中应用。

2 个答案:

答案 0 :(得分:3)

在外键约束上使用级联运算符是一个热门话题。

理论上,如果你知道删除一个父对象也会自动意味着删除它的所有子对象,那么在子表和父表之间的链接上的级联删除可能是有意义的。

想象一下由“部件”组成的“机器”。如果你的逻辑说如果机器被删除,组成该机器的所有部件也将从数据库中清除,那么你可以在部件表和机器表之间的外键链接上使用级联删除选项。 / p>

但是:这可能有点棘手,特别是如果您最终拥有与此选项链接的整个表链。因此,许多开发人员倾向于在他们自己的数据访问代码中处理它,而不是在数据库中定义它。

更新级联通常在父表上的主键更改时使用 - 以便更新所有相关的子表和行以反映该更改。这通常被认为是数据库代码的味道 - 这里更好的选择是确保主键永远不会改变,因此永远不需要这种级联更新 - 例如通过在您的表中引入一个人为的“代理”键列,该列没有与业务相关的含义,因此永远不会更新。

这有帮助吗?您还不清楚任何特定的细节?

我的观点是:虽然理论上这是一个好主意,但大多数开发人员并没有真正在“真实”中使用它 - 大多数开发人员会选择在数据访问代码中处理这个问题,从而为他们提供全面和明确的控制什么被删除(或更新)。

答案 1 :(得分:0)

以及marc_s所说的......

我发现CASCADE选项有时会在不需要延长事务,使用更多锁,使用更多资源等的情况下为子表生成“虚拟”更新。