在MSsql 2005中,我刚刚发现了臭名昭着的错误信息:
Introducing FOREIGN KEY constraint XXX on table YYY may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION,or modify other FOREIGN KEY constraints.
现在,StackOverflow有关于这个错误消息的几个主题,所以我已经得到了解决方案(在我的情况下我将不得不使用触发器),但我很好奇为什么会有这样的问题.
据了解,基本上有两种想要避免的情况 – 一个循环和多个路径.一个循环将是两个表彼此之间具有级联外键的位置.好的,一个循环也可以跨越几个表,但这是基本的情况,将更容易分析.
当TableA具有TableB和TableC的外键时,多个路径将是TableB,而TableB也有一个外键到TableC.再次 – 这是最基本的情况.
当任何这些表中的记录被删除或更新时,我看不到会出现任何问题.当然,您可能需要多次查询相同的表,以查看哪些记录需要更新/删除,但这真的是一个问题吗?这是一个性能问题吗?
在其他SO主题中,人们将使用级联标记为“risky”,并指出“resolving cascade paths is a complex problem”.为什么?风险在哪里?哪里有问题?