什么是相当于“删除用户时,删除所有帖子”的数据库概念?

时间:2009-01-28 21:42:04

标签: sql database

什么是数据库概念,相当于“删除用户时,删除所有帖子”? 这是件好事吗?

另一个例子:如果您的网站是编程论坛,则需要在删除主题之前查找和删除与该主题相关的注释。

这应该在数据库层自动处理吗?

4 个答案:

答案 0 :(得分:11)

级联删除

我会毫不犹豫地推荐真正删除 - 而是使用软删除将记录标记为已删除 - 在这种情况下,您可以使用级联更新(或不使用,因为原始主题已被标记为已删除)。

答案 1 :(得分:7)

级联更新,通常与外键引用一起使用。不同的DBMS提供不同级别的支持。

在论坛或类似网站的特定情况下,我建议使用“软”删除 - 将数据库中的行标记为已删除,这将阻止在列表或搜索结果中查看或返回这些行,但不要完全删除它们。这有利于取消删除等,以抵制劣质或偏见的适度。

此外,我建议在删除用户帐户时自动删除用户的帖子可能不是所有情况下的最佳行为 - 当然,在处理巨魔/垃圾邮件帐户时,您可能想删除垃圾帖子,但是你不一定要在其他情况下抛弃所有信息,特别是因为它引入了破损引用的问题(例如外部参考,其他帖子的交叉链接等)。

答案 2 :(得分:0)

您的问题的答案是级联删除。为了记录,我讨厌用户删除作为论坛功能。如果人们想要离开,那就太棒了...我想看看他们在那里时所做的事情的历史。

答案 3 :(得分:-1)

不确定这是否是您想要找到的,但在MySQL中,您所询问的事物(我认为)的类型称为触发器。它基本上是一个SQL语句,它与表和该表上的操作相关联;例如,您可以设置一个语句,该语句将在删除用户记录时执行,这将删除与该用户关联的所有评论/帖子/任何内容。

请参阅http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html及其中的链接(当然是MySQL的其他数据库可能会有所不同)