这些约束如何导致循环或多个级联路径?

问题描述 投票:1回答:1

注意:这个问题更多的是关于数据库设计和SQL Server,而不是像EF Core这样的特定ORMDB。

我有一个看起来像这样的数据库模式:

enter image description here

使用EF Core迁移,所有SQL语句都可以运行到最后一个约束(FK_BookReleases_Nicknames_NicknameId)。可以添加以前的FK FK_BookReleases_Books_BookId

我收到的错误是(与其他有关SO的文章一样:]

介绍FOREIGN KEY约束表'BookReleases'上的'FK_BookReleases_Nicknames_NicknameId'可能导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。

我的问题是,该设计的缺陷在哪里?我无法理解在任何逻辑上都会发生这种情况。正确的解决方法是什么?我看到许多建议更改ON DELETE动作的建议,但没有具体说明我应该使用哪个FK以及其他什么动作。

更糟糕的是,即使已经读过this article,我仍然不明白这可能是个问题,他提出的解决方案如何适合上述方案。

sql sql-server foreign-keys cascade
1个回答
1
投票

该问题是由于从作者(祖父母)到BookRelease(孙子女)的多个级联路径。有两种级联路径:

  1. 作者->图书->图书发行
  2. 作者->昵称-> BookRelease

将在post in MSSQLTips中详细讨论

Multiple Cascading Paths

因此,处理此问题的方法是:

  1. 禁用ON DELETE CASCAE并选择NOACTION作为外键创建。

  2. 在Author(GrandParent),Book(Child1),Nickname(Child2)表中创建INSTEAD OF DELETE TRIGGERS,以处理子表中父键的删除。

  • Grand Parent delete:在GrandChild中删除,然后是Child1,其次是Child2,
  • Child1删除:在GrandChild中删除,然后由Child1
  • Child2删除:在GrandChild中删除,然后在Child2中进行删除>
© www.soinside.com 2019 - 2024. All rights reserved.