代码之家  ›  专栏  ›  技术社区  ›  Mark

为什么我用这个表关系得到“多个级联路径”?

  •  0
  • Mark  · 技术社区  · 17 年前

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

              Parent
              /    \
        Child1      Child2
            \        /
            GrandChild
    

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

    当我试图将ON DELETE CASCADE添加到FK关系中时,将它们添加到两个孩子的一个“侧面”是可以的(Parent-Child1-GrandChild适用于CASCADE DELETE)。然而,一旦我在关系的Child2“侧”添加Cascade Delete,SQL就会告诉我FK将导致多个级联路径。我的印象是,只有当多个FK表示同一个表时,多个级联路径才适用。为什么在这种情况下我会得到多个级联路径错误?

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

    1 回复  |  直到 17 年前
        1
  •  4
  •   devio    17 年前

    该消息意味着,如果删除父记录,则有两条路径指向所有可删除的孙子记录。

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