【发布时间】:2014-01-12 16:46:06
【问题描述】:
圣诞快乐,
我正在寻找一种替代数据库设计来避免这种 ULTRA SAFE 错误:
在表 '%2' 上引入 FOREIGN KEY 约束 '%1' 可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。
当同一个表的2个字段引用同一个FK时。例如:
People: {Id, Name, Age, Gender}
FamilyRelative: {PersonId, FamiliarId, Relationship}
FK: FamilyRelative.PersonId ->People.Id ON DELETE CASCADE ON UPDATE CASCADE
FK: FamilyRelative.FamiliarId->People.Id ON DELETE CASCADE ON UPDATE CASCADE
在第二个 FK 上引发错误。
PS:我正在 SQL Server 2008R2 中测试它
【问题讨论】:
-
你想达到什么目的?当您删除 People 记录时,您希望删除该 People.Id 的所有具有 Person.Id 或 FamiliarId = 的 FamilyRelative 记录?
-
@Vland,是的,这正是我想要实现的目标。
-
我建议你从业务角度看问题。您遇到的情况是自我引用多对多的结果,这在商业上很奇怪。一个人属于多个家庭,一个家庭有很多人,不够详细,无法建模。
-
@EmmadKareem 如果您愿意,我们可以在生产环境中使用像 材料清单 这样不那么奇怪的示例作为组件列表:
{FinishMaterialId, RawMaterialId, RawQuantity}。任何 ERP 都有一个这样的表!
标签: sql sql-server sql-server-2008-r2 foreign-keys