两个外键引用相同的主键会导致循环或多级联路径,但为什么呢?

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

我正在尝试对数据库中的某些表定义一些约束。 我有下表:

目的地

ID
(PK),
Description

托盘

ID
(PK)、
ID_Destination1
ID_Destination2

并且我想将

ID_Destination1
ID_Destination2
定义为引用表 Destinations ID 的外键。

但是,当我尝试使用约束

ON UPDATE CASCADE
ON DELETE SET NULL
定义这些外键时,出现以下错误:

在表“Pallets”上引入 FOREIGN KEY 约束“FK_PalletDest1”可能会导致循环或多级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。

我设法创建了仅定义一个带有约束的外键的表

ON UPDATE SET NULL
ON DELETE SET NULL
,但我无法创建两个外键。

我读到一种解决方案可能是设置

ON UPDATE NO ACTION
ON DELETE NO ACTION
,并管理代码中 Destinations 中行的更新/删除,但我想了解为什么会出现此错误。为什么这些关系会产生循环呢?有没有更好的解决方案来绕过这个错误?

感谢任何能够阐明这一点的人。

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

根本不支持“多个级联路径”之后的级联删除。这是可以做到的,多年来一直有人要求实施它,但从未被优先考虑。

您可以在此处查看反馈项目并对其进行投票:https://feedback.azure.com/d365community/search/04fe6ee0-3b25-ec11-b6e6-000d3a4f0da0?q=multiple+cascade+paths

© www.soinside.com 2019 - 2024. All rights reserved.