为啥我会通过此表关系获得“多个级联路径”?
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错误