删除级联在这种情况下不起作用[重复]

Posted

技术标签:

【中文标题】删除级联在这种情况下不起作用[重复]【英文标题】:Delete cascade doesn't work in this scenario [duplicate] 【发布时间】:2013-04-11 11:31:09 【问题描述】:

场景: 用户可以创建一个关系类型,比如朋友,然后用户可以链接一些其他用户作为关系定义。如果用户被删除,关系定义也应该被删除,用户之间的关系也需要被删除。

这是一个在 sql server 上的演示数据库设计:http://i.stack.imgur.com/3pcOy.png 外键是:

    表 2.UserId 参考表 1.UserId; 表 3.RelationShipId 参考表 2.RelationshipId; 表 3.UserId 参考表 1.UserId; 表 3.OtherUserId 参考表 1.UserId;

我的目标是删除表1中的记录时,会删除表2和表3中的相关记录;删除表2中的记录时,会删除表3中的相关记录。

当我尝试使用“ON DELETE CASCADE”时,出现“可能导致循环或多个级联路径”错误,我也不想使用触发器。

您对这种情况有什么建议吗? 谢谢,

【问题讨论】:

数据库? PostgreSQL、mysql、ORACLE……? @RGPT 看起来像图片中的 SQL 服务器 你能解释一下设计吗?我感觉问题可能出在设计本身 您是否在此处寻找已回答的解决方案? [试试这个...][1] [1]:***.com/questions/851625/… 不管你想不想,在 SQL Server 中,你都必须使用触发器 【参考方案1】:

表 3 中的 userid 不是多余的吗?或者至少如果您将用户 ID 放在表 3 中,为什么还有表 2?表2中的信息已经存在于表3中。

是否曾经出现过表 3 上的用户 id 与表 2 上的关系记录不一样的情况?如果不是 - 表 2 是多余的。

【讨论】:

我已经在描述中添加了场景。

以上是关于删除级联在这种情况下不起作用[重复]的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个 if 语句在这种情况下不起作用? [关闭]

为啥 selectAnnotation 在这种情况下不起作用?

为啥 DISTINCT 在这种情况下不起作用? (SQL)

为啥我的 JRadioButton 在这种情况下不起作用?

Javascript 音频播放在这种情况下不起作用

为啥回顾中的有限重复在某些情况下不起作用?