【发布时间】:2011-12-01 14:23:20
【问题描述】:
假设我有 3 个表,“child1”、“child2”和“child3”,它们都有一个指向“parent”表的外键。 表“父”有一个字段“状态”,我希望如果一个元素的状态设置为“0”,它的所有子元素都将被删除。 (我使用触发器来检测状态变化)。 所以这就像调用“级联删除”,但没有删除对象......
有什么好办法吗?
【问题讨论】:
-
所以如果我理解,您打算在不实际删除父行的情况下删除所有与 FK 相关的子行?
-
如果您使用触发器,那么您已经很可能实施了非常糟糕的做法(并且性能会受到影响)。
-
@Romain 我非常不同意触发器 = 不好的做法。事实上,这个问题听起来像是一个触发器的有效用例,它会在父状态更改时删除子行。
-
@JoeStefanelli 我不是说
triggers = bad practice,而是triggers = often bad practice symptom。触发器肯定有有效的案例,这可能是一个,但这通常不会扩大(但我想这取决于你的可扩展性需求)。