【发布时间】:2013-11-11 15:59:02
【问题描述】:
表 DISPLAY_TAB 下面是一个自引用表,可以包含父标签和子标签。一个父选项卡可以有多个子选项卡,一个子选项卡可以属于多个父选项卡。
我想在主表和关系表 DISPLAY_TAB_GROUPING 之间建立 CASCADE DELETE 关系,所以当父标签或子标签被删除时 - 关系也会自动删除(只是关系,而不是实际标签记录)。因此,我在 DISPLAY_TAB_GROUPING 上为字段 TAB_ID_R_1 和 TAB_ID_R_2 表创建 FOREIGN KEY 约束,引用 DISPLAY_TAB 表中的 TAB_ID。它工作正常,当我为其中一个关系添加 ON DELETE CASCADE 时,它工作正常,但是当我对两者都尝试时 - 它会抛出一个错误,即 “可能导致循环或多个级联路径” .
如何为这两种关系设置 ON CASCADE DELETE?我看不出这会如何导致循环 - 每次删除主表中的记录时,只应删除关系表中的相关记录。
【问题讨论】:
-
您可以在触发器中使用 CTE 来确定所有相关行并将它们一起删除。
-
错误信息显示“可能导致循环...”,这意味着技术上有这样的可能性。 DISPLAY_TAB 行可以是 DISPLAY_TAB_GROUPING 中的子项和父项,如果两个 ON CASCADE DELETE 设置都有效,删除它确实会导致多个级联路径。
-
@AndriyM 感谢您的澄清,我看不到。从逻辑上讲,孩子不能成为自己的父母,但我可以看到技术上的可能性。
-
我的意思是它可能是一行的父行和另一行的子行。
-
@AndriyM 在我的情况下这是一个单级关系,但我明白你的意思。
标签: sql tsql foreign-keys cascade cascading-deletes