在我的数据库中,我有许多可以相互关联的对象。
这很好,直到我决定要删除这些对象。由于关系记录,我需要实现级联删除以防止抛出异常。
当删除关系两侧的对象时,我也希望删除关系记录。我想创建一个如下所示的数据库结构:
CREATE TABLE [MyObject]
(
[ID] [int] IDENTITY PRIMARY KEY,
...
);
CREATE TABLE [MyObjectRelation]
(
[ID] [int] IDENTITY PRIMARY KEY,
[MyObjectID] [int] FOREIGN KEY REFERENCES [MyObject] ([ID]) ON DELETE CASCADE,
[RelatedMyObjectID] [int] FOREIGN KEY REFERENCES [MyObject] ([ID]) ON DELETE CASCADE
)
但是,每当我尝试在我的数据库上运行它时,都会收到以下错误消息:
在表'MyObjectRelation'上引入FOREIGN KEY约束'...'可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。
我已阅读有关此内容的文档,但我看不出此布局如何导致循环。当然,我完全有可能误解了MSDN上用于级联删除的文档,并且上面的数据库布局无法实现我想要的。
我很想听听我能做些什么来实现我想要的行为。
答案 0 :(得分:1)
您收到此错误消息,因为在SQL Server中,一个表不能出现多次在由DELETE或UPDATE语句启动的所有级联引用操作的列表中。例如,级联引用操作树必须只有一条到级联引用操作树上特定表的路径。
您可以使用触发器来实现相同的行为。