我有一个Person
表和Stuff
表。 Stuff
可能属于一个人,而其他人(非所有者)也可以使用这些东西。
这是设计:
人
东西
现在更改表格以建立关联:
alter table [stuff]
add constraint Stuff2PersonOwner
foreign key (PersonId)
references [person] (id) ON DELETE SET NULL;
上面的脚本执行正常。
alter table [stuff]
add constraint Stuff2PersonUser
foreign key (UserId)
references [person] (id) ON DELETE SET NULL;
当我执行上面的脚本时,我得到一个例外:
在表'Stuff'上引入FOREIGN KEY约束'Stuff2PersonUser' 可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY 约束
这是什么问题?为什么我无法与ON DELETE SET NULL
创建第二个关联?
答案 0 :(得分:1)
外键的documentation指定以下限制:
由单个触发的一系列级联参照动作 DELETE或UPDATE必须形成一个不包含循环的树 引用。没有表可以在所有列表中出现多次 由DELETE或UPDATE产生的级联引用操作。 此外,级联引用操作树必须没有更多 而不是指向任何指定表的一条路径。树的任何分支都已结束 当它遇到一个已经指定了NO ACTION的表时 是默认值。
突出显示的句子描述了正在发生的事情。删除Stuff
时,两个潜在路径会到达Person
- 每列一个。因此,SQL Server不允许使用此选项的第二个外键关系。