外键级联多路径和周期有什么问题?

Vil*_*lx- 18 sql cascade foreign-keys rdbms-agnostic

在MSSQL 2005中,我刚刚发现臭名昭着的错误消息:

在表YYY上引入FOREIGN KEY约束XXX可能会导致循环或多个级联路径.指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束.

现在,StackOverflow有关于此错误消息的几个主题,所以我已经得到了解决方案(在我的情况下我将不得不使用触发器),但我很好奇为什么会出现这样的问题.

据我了解,他们基本上有两种情况需要避免 - 一个循环和多个路径.一个循环是两个表彼此级联外键的地方.好的,一个循环也可以跨越几个表,但这是基本情况,并且更容易分析.

当TableA具有TableB和TableC的外键时,将有多个路径,TableB也具有TableC的外键.再次 - 这是最基本的案例.

当在任何这些表中删除或更新记录时,我看不到任何问题.当然,您可能需要多次查询同一个表以查看哪些记录需要更新/删除,但这真的是一个问题吗?这是性能问题吗?

在其他SO主题中,人们甚至将使用级联标记为" 有风险 ",并声明" 解决级联路径是一个复杂的问题 ".为什么?风险在哪里?问题出在哪儿?

gbn*_*gbn 4

您有一个子表,其中包含来自同一父表的 2 个级联路径:一个“删除”,一个“空”。

什么优先?之后你期待什么?ETC

注意:触发器是代码,可以向级联添加一些智能或条件。