我正在建立一个网站,用户可以在其中发布“帖子”,然后用户可以在这些帖子上“发表评论”。我有一个包含3个表的数据库。一个包含用户信息,一个包含发布信息,最后一个包含评论信息。
我想设置规则,以便如果删除用户,则删除其所有帖子和评论,如果用户删除其帖子之一,则删除所有相关评论。但是,这将设置“多个CASCADE路径”。
我一直在寻找解决方案,并找到了一些有关触发器的信息。它们会是最好的东西吗?如果使用它们,是否必须更改所有CASCADES才能由触发器完成?
谢谢
另一个选择是创建两个专用的存储过程,这些存储过程将根据需要执行这些删除步骤
CREATE PROCEDURE dbo.DeleteUser @UserID VARCHAR(50) AS BEGIN DELETE FROM dbo.Comments WHERE Author = @UserID DELETE FROM dbo.Posts WHERE Author = @UserID DELETE FROM dbo.User WHERE UserID = @UserID END
对于第二条规则:
CREATE PROCEDURE dbo.DeletePost @PostID INT AS BEGIN DELETE FROM dbo.Comments WHERE PostID = @PostID DELETE FROM dbo.Posts WHERE ID = @PostID END
在这种情况下,您可以完全控制实际发生的事情,级联删除不会有意外的意外,也不需要使用触发器。