无法使用删除级联创建外键约束,因为已经有一个

时间:2013-05-16 18:24:15

标签: sql-server sql-server-2008 foreign-keys

以下是方案

  • Table1Id, Name

  • Table2Id, Name1, Name2, Type

    • FK1Name1使用Table1.Name
    • 引用On delete cascade
    • FK2Name2使用Table1.Name
    • 引用On delete cascade

FK2抛出以下错误

ERROR:

  

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

但是,在我的方案中,删除了Name1Name2的实体是否应删除Table2中的相应条目。

请帮助我了解这可能导致的问题是什么?

1 个答案:

答案 0 :(得分:2)

FK2不会导致循环,但会导致多个级联路径。从Table2中删除的记录将导致Table1中的行被删除两次,每次删除标记为级联的外键。这是设计不允许的。您提出的问题已经回答here

“由单个DELETE或UPDATE触发的一系列级联引用操作必须形成一个不包含循环引用的树。在表的所有级联引用操作的列表中,任何表都不会出现多次DELETE或UPDATE。此外,级联引用操作树不得有任何指定表的多个路径。树的任何分支在遇到已指定NO ACTION的表时结束,或者是默认。”取自MSDN Library

相关问题