我有用户和邮政之间的1 .. *关系。 (一个用户有很多文章)SQL Server 2008 - 多级联FK - 我需要一个触发器吗?
邮政有一个FK称为“用户ID”,其映射到“用户ID”字段上用户表。
我试图设置此FK作为级联更新/删除,但我得到这个错误:
'Users' table saved successfully 'Posts' table - Unable to create relationship 'FK_Posts_Users'.
Introducing FOREIGN KEY constraint 'FK_Posts_Users' on table 'Posts' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. Could not create constraint. See previous errors.
我有一个表叫PostHelpful。一篇文章有很多有用的。
有帮助有一个级联FK用户(所以当一个用户被删除,他们的帮助也被删除)。
但我认为这是“多重级联路径”的投诉原因。
因为如果我删除了一个用户(当前),它会删除他们的帮助。但即时通讯试图添加一个cacade邮政也,它会删除邮政,然后尝试删除有用的邮件(作为有帮助也有级联FK邮政)。在这种情况下,SQL选择哪个级联FK?
这里是有问题的三个表的数据库图表:
正如你所看到的,“PostHelpful”是孩子既有“邮报”和“用户”(具有FK的既)。
所以我不能让两个键级联?我是否需要“用户”(AFTER DELETE)上的触发器来手动删除帮助文件(和其他引用用户的表)。
您已经发现问题以及如何解决问题。删除User和PostHelpful之间的级联删除,在PostHelpful中添加一个触发器给用户'on delete'删除。那么你应该可以在User和Post之间添加级联删除。 – 2011-02-24 09:48:15
@Mikael Eriksson - 真的吗?我的意思是它会工作,但我希望这是做错事情的错误方式。触发器不应该强制引用完整性。 – RPM1984 2011-02-24 11:05:47
嗯。从未将级联删除视为参照完整性约束的一部分。更像是一种处理删除的便捷方式。我可能不会使用触发器或级联删除。我会编写一个按正确顺序删除的存储过程。 – 2011-02-24 11:12:32