为啥我会通过此表关系获得“多个级联路径”?

Posted

技术标签:

【中文标题】为啥我会通过此表关系获得“多个级联路径”?【英文标题】:Why am I getting "multiple cascade paths" with this table relationship?为什么我会通过此表关系获得“多个级联路径”? 【发布时间】:2008-09-23 19:36:59 【问题描述】:

我的数据库中有如下表关系:

          Parent
          /    \
    Child1      Child2
        \        /
        GrandChild

我正在尝试创建 FK 关系,以便删除父表级联到子表和孙表。对于任何一个特定的孙子,它要么是一个或另一个子表的父级,但绝不会同时成为两个子表。

当我尝试将 ON DELETE CASCADE 添加到 FK 关系时,将它们添加到两个孩子的“一侧”一切都很好(Parent-Child1-GrandChild 适合 Cascade Delete)。但是,只要我在关系的 Child2“一侧”添加 Cascade Delete,SQL 就会告诉我 FK 会导致多个级联路径。我的印象是,仅当多个 FK 指示 SAME 表时才适用多个级联路径。在这种情况下,为什么会出现多级联路径错误?

PS 此时的表关系很难改变,所以简单地告诉我改变我的表结构不会有帮助,谢谢。

【问题讨论】:

【参考方案1】:

该消息的意思是,如果您删除父记录,则有两条路径可通向所有可删除的 GrandChild 记录。

修复:删除 FK 中的 ON DELETE CASCADE 选项,并为 ChildX 表创建 INSTEAD OF DELETE 触发器,删除所有孙记录,然后删除 childX 记录本身。

【讨论】:

以上是关于为啥我会通过此表关系获得“多个级联路径”?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我会通过 Mockery 获得 NoMatchingExpectationException?

当我第一次检索必须在 @ManyToMany 关系中使用的对象时,为啥我会获得这个“传递给持久化的分离实体”?

定义多对多关系的代码第一种方法导致关于“循环或多个级联路径”的mssql错误

如何在有循环和多个级联路径的情况下配置级联删除

FOREIGN KEY可能会导致循环或多个级联路径异常[重复]

为啥从子组件返回时我会从查询结果中获得空指针?