为什么我通过这种表关系得到"多个级联路径"?
时间:2020-03-06 14:37:19 来源:igfitidea点击:
我的数据库中具有以下表关系:
Parent / \ Child1 Child2 \ / GrandChild
我试图创建FK关系,以便父表的删除级联到子表和孙表。对于任何一个特定的granchild,它将或者成为一个或者另一个子表的父项,但决不会同时存在。
当我尝试在FK关系中添加DELETE CASCADE时,将它们添加到两个孩子的一个"边"中就可以了(Parent-Child1-GrandChild对于"级联删除"来说很好)。但是,一旦我在关系的Child2"边"上添加了级联删除,SQL就会告诉我FK会导致多个级联路径。我的印象是,只有当多个FK表示SAME表时,才应用多个级联路径。在这种情况下,为什么会出现多个级联路径错误?
PS此时的表关系很难更改,因此,简单地告诉我更改表结构将无济于事。
解决方案
该消息表示,如果删除父记录,则有两条路径可导致所有可删除的GrandChild记录。
修复:删除FK中的ON DELETE CASCADE选项,并为ChildX表创建INSTEAD OF DELETE触发器,删除所有孙记录,然后childX记录自己。