在 SQL Server 2005 中,我刚刚发现了臭名昭著的错误消息:
在 YYY 表上引入 FOREIGN KEY 约束 XXX 可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。
现在,StackOverflow 有几个关于此错误消息的主题,所以我已经有了解决方案(在我的情况下,我将不得不使用触发器),但我很好奇为什么会出现这样的问题。
据我了解,他们基本上想要避免两种情况——循环和多条路径。循环将是两个表具有彼此级联的外键。好的,一个循环也可以跨越多个表,但这是基本情况,更容易分析。
当 TableA 具有 TableB 和 TableC 的外键,而 TableB 也具有 TableC 的外键时,就会出现多条路径。再次 - 这是最小的基本情况。
我看不到在任何这些表中删除或更新记录时会出现任何问题。当然,您可能需要多次查询同一个表以查看哪些记录需要更新/删除,但这真的有问题吗?这是性能问题吗?
在其他 SO 主题中,人们甚至将使用级联标记为“有风险的”,并指出“解决级联路径是一个复杂的问题”。为什么?风险在哪里?哪里有问题?