【发布时间】:2020-07-25 10:46:58
【问题描述】:
注意:这个问题更多是关于数据库设计和 SQL Server,而不是像 EF Core 这样的特定 ORMDB。
我有一个如下所示的数据库架构:
使用 EF Core Migration,所有 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,我仍然不明白这怎么可能是一个问题,以及他提出的解决方案如何适合上述架构。
【问题讨论】:
-
在这里查看答案:stackoverflow.com/questions/851625/… 设计确实没有问题,这是一个实现限制。
-
@GeorgeBarwood 对不起,也许夜班让我心烦意乱。我实际上在我的问题中引用了这个答案,问题是,我无法理解他的解决方法是如何工作的。即在上述情况下,我的桌子应该是什么样子?或者我应该改变什么 FK Action?
-
我想我会在 Author-Nickname FK 关系上设置 No Action,假设 Nickname 永远不会被删除,或者如果 Author 被删除,则必须先删除所有昵称。
-
请通过编辑而非 cmets 进行澄清。将提问所需的内容直接放入其中。如果您想询问对演示文稿的理解,请明确说明并引用需要解释的内容来解释您是如何被卡住的。或评论该帖子以进行澄清。请use text, not images/links, for text--including tables & ERDs。仅将图像用于无法表达为文本或增强文本的内容。在图像中包含图例/键和说明。代码问题请给minimal reproducible example。
-
“可能导致循环或多级联路径”阅读手册——不允许多路径。找出“路径”的含义。遵循来自 Author 的级联路径 - AuthorRelease 有两个。你是如何陷入这个过程的?或者,如果您无法按照您的评论遵循解决方案,那么您的问题实际上并不是您的帖子所说的,因此请编辑您的帖子以提出您想问的 1 个问题。
标签: sql sql-server foreign-keys cascade