小编典典

外键约束可能导致循环或多个级联路径?

all

当我尝试向我的表添加约束时遇到问题。我得到错误:

在表 ‘Employee’ 上引入 FOREIGN KEY 约束 ‘FK74988DB24B3C886’ 可能会导致循环或多个级联路径。指定 ON
DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。

我的约束是在一个Code表和一个employee表之间。该Code表包含IdNameFriendlyNameTypea
Value。有许多引用代码的employee字段,因此可以对每种类型的代码进行引用。

如果引用的代码被删除,我需要将字段设置为 null。

任何想法我怎么能做到这一点?


阅读 65

收藏
2022-07-07

共1个答案

小编典典

SQL Server 对级联路径进行简单计数,而不是尝试确定是否确实存在任何循环,而是假设最坏的情况并拒绝创建引用操作
(CASCADE):您可以而且应该仍然在没有引用操作的情况下创建约束。如果你不能改变你的设计(或者这样做会影响事情),那么你应该考虑使用触发器作为最后的手段。

FWIW 解决级联路径是一个复杂的问题。其他 SQL
产品将简单地忽略该问题并允许您创建循环,在这种情况下,将竞相看哪个将最后覆盖该值,这可能是设计者的无知(例如 ACE/Jet 就是这样做的)。我知道一些
SQL 产品会尝试解决简单的情况。事实仍然存在,SQL Server 甚至没有尝试,通过禁止多个路径来保证它的安全性,至少它告诉你是这样的。

Microsoft 自己建议使用触发器而不是 FK
约束。

2022-07-07