一个表有两个用于外键,如何设置删除级联

时间:2015-03-29 14:55:51

标签: sql-server-2008

我有四个表,我将其命名为T1,T2,T3,T4。现在我设置参考T1-> T2-> T3-> T4,并设置on delete cascade属性,它没问题。但是当我设置T1-> T3并且还有on delete cascade属性时,sqlserver报告错误,错误看起来像是导致循环级联或多级联'。 我的问题是:T3中的部分记录确实属于T2,T3中的部分记录确实属于T1,如果T3中的一条记录属于T1,它将永远不属于T2。我该如何表达这种关系?

由于

1 个答案:

答案 0 :(得分:0)

听起来像T3包含的实体并非完全相同,如果某些实体属于T1而有些属于T2。它们可能具有相同的结构,但它们并不是真的相同。

至于如何表达这种关系:嗯,你可以将T3分成两个不同的表。这将允许您的删除级联工作。

或者,如果您决定保留T3一个表格,则可以尝试使用删除触发器。

核心问题是只有你知道if-it-its-to-T1-it-not-to-T2条件:没有办法通过外键单独表示。要表示这一点,您需要逻辑,这是触发器的来源。

如果您发现T3中的其他列仅在记录属于T1时应用,并且当记录属于T2时为空,反之亦然,那么表明,无论记录看起来如何相似,它们在逻辑上确实是独立的实体。