我有四个表,我将其命名为T1,T2,T3,T4。现在我设置参考T1-> T2-> T3-> T4,并设置on delete cascade属性,它没问题。但是当我设置T1-> T3并且还有on delete cascade属性时,sqlserver报告错误,错误看起来像是导致循环级联或多级联'。 我的问题是:T3中的部分记录确实属于T2,T3中的部分记录确实属于T1,如果T3中的一条记录属于T1,它将永远不属于T2。我该如何表达这种关系?
由于
答案 0 :(得分:0)
听起来像T3
包含的实体并非完全相同,如果某些实体属于T1
而有些属于T2
。它们可能具有相同的结构,但它们并不是真的相同。
至于如何表达这种关系:嗯,你可以将T3
分成两个不同的表。这将允许您的删除级联工作。
或者,如果您决定保留T3
一个表格,则可以尝试使用删除触发器。
核心问题是只有你知道if-it-its-to-T1-it-not-to-T2条件:没有办法通过外键单独表示。要表示这一点,您需要逻辑,这是触发器的来源。
如果您发现T3
中的其他列仅在记录属于T1
时应用,并且当记录属于T2
时为空,反之亦然,那么表明,无论记录看起来如何相似,它们在逻辑上确实是独立的实体。