10

也许这是一个幼稚的问题……但我认为我们应该始终进行级联删除和更新。但我想知道它有没有问题,我们什么时候不应该这样做?我现在真的想不出你不想进行级联删除的情况,但我敢肯定有一个......但是更新应该总是完成吗?

那么任何人都可以列出级联删除和更新的优缺点吗?谢谢。

4

3 回答 3

12

优点:

  • 当您从父表中删除一行时,所有外键行都被删除
  • 这通常比使用触发器实现它要快
  • 孤立行不太可能

缺点

  • 孤儿是可能的
  • 如果你错误地删除了父表中的一行,则相应子表中的所有行都将被删除,并且将由 PITA 找出你删除的内容
于 2010-08-26T20:00:47.160 回答
10

这取决于表中包含的实体:如果没有主键的一面,外键的一面就不能存在,那么级联删除是有意义的。

例如:如果发票被删除,发票行项目没有任何生存权。

但是如果你有一个外键用于员工和他/她的老板之间的关系“works for”,如果老板离开公司,你想删除员工吗?

另外:一个技术问题是,如果依赖表条目发生更改而某些 ORM(对象关系映射)工具没有对此负责。

于 2010-08-26T20:00:24.957 回答
1

优点:

  • 数据完整性 - 可以帮助避免记录引用不再存在的内容的情况。

缺点:

  • 性能 - 级联删除/更新可能很慢。
  • 复杂性——似乎与我一起工作的大多数人都不习惯级联,所以当你给他们一个拥有它的新项目时,他们第一次触发这些级联时会有点惊讶。
  • 正如其他人已经提到的那样,如果使用不当,真的会搞砸。
于 2010-08-26T20:00:04.177 回答