自身外键可能导致循环或多个级联路径

时间:2017-10-25 12:42:29

标签: sql-server foreign-keys constraints

考虑这个自我引用表:

String tmpFlag= request.getParameter("Flag");
if( tmpFlag != null && tmpFlag !="" ){
//some logic
}

现在,让我们尝试创建一个自引用外键:

create table _test_cascade
(id int not null identity primary key,
 other_id int null)

SQL server(11.0.2100)会给你一个臭名昭着的错误:

alter table _test_cascade
add constraint _test_cascade_constraint
foreign key (other_id) references _test_cascade(id)
on delete set null

我从this question知道SQL Server不是很擅长检测实际周期和级联路径,但我无法理解这种情况如何被视为此类问题的可能来源,因为没有级联操作,只有一个外键。

This other question是类似的,但在这种情况下,自引用外键指定删除级联,我明白为什么是危险的,不应该被允许。

我的问题是,为什么不允许这种关系?

PD:我知道通常自我引用表是数据库设计"气味",但修复该设计不适合我。

修改

这已被标记为this other question的副本,但该更为通用且所提供的答案不适用于此方案,因为在这种情况下,没有指定级联删除或多个关联。我理解一般问题,我不明白为什么它适用于这种情况。

0 个答案:

没有答案