假设我在一个层次结构中有 3 个表:
TableA -> TableB -> TableC
TableC
与 有外键关系TableB
,与TableB
有外键关系TableA
。
如果我在 中删除一条记录TableA
,它应该通过层次结构级联删除。使用ON DELETE CASCADE
会很好。
但是,假设我需要INSTEAD OF
在TableC
. 我的理解是INSTEAD OF
触发器不能放在有删除级联的表上。取自 MSDN:
对于 INSTEAD OF 触发器,在具有指定级联操作 ON DELETE 的引用关系的表上不允许使用 DELETE 选项。
如果我必须关闭级联删除TableB->TableC
,我需要使用INSTEAD OF
触发器来强制执行参照完整性,然后我会遇到同样的问题TableB->TableA
。这是一个简单的例子,但想象级联路径要大得多。它似乎很容易在一条长长的级联路径中滚雪球。
那么处理这种情况的最佳实践是什么?