【问题标题】:Delete parent record and keep child in comments table删除父记录并将子记录保留在评论表中
【发布时间】:2014-10-26 02:35:07
【问题描述】:

我有一个 cmets 表,其中包含以下字段:

  • 评论编号
  • 父评论ID
  • 帖子编号
  • 用户名
  • 评论
  • 可见性

对于我正在构建的网站,我希望用户能够删除他们的帐户。这样做后,被删除用户创建的所有 cmets 也将被删除。

我担心的是,如果属于已删除用户的评论有子 cmets 怎么办?他们会有一个不存在的父母,我不觉得我应该自动删除这些 cmets,因为它们属于制作它们的用户,但它们确实变得无关紧要,因为它们是在回复不再存在的评论。

我最初的想法是保留删除的评论记录,但删除用户ID和评论。然后所有子 cmets 的可见性将更改为隐藏,直到这些 cmets 的用户选择删除它们。

这是一个好方法吗,有没有更好的方法来处理这种情况?我问的是数据库设计和概念方面的问题。

【问题讨论】:

  • 我认为如果您保留已删除用户的 cmets 会更好,但在您的前端显示该用户因 XX 而被删除。但是在删除用户时,您可以有一个复选框选项 - 删除用户 cmets - 这将删除所有 cmets 及其回复,因为如果您不希望再次在您的站点上显示子 cmets,将它们存储在你的数据库。
  • 是的,我喜欢保留评论的位置但显示评论实际上已被删除的想法......因为它有任何子 cmets,否则它可能会被完全删除。跨度>

标签: mysql database


【解决方案1】:

我建议保留孩子们的 cmets,只要发布它们的用户或他们所属的对话的用户仍然存在。如果这两个用户都被删除,那么您可以删除他们。

此外,您可以添加一个标记,将用户标记为已删除,而不是从数据库中删除用户。令人惊讶的是,这样的事情需要撤消多少次。然后你可以有一个后台作业来删除超过 X 个月的用户。

【讨论】:

  • 我喜欢这种方法。感谢您提供有关长期保留用户帐户的建议,这是个好主意。
【解决方案2】:

这完全取决于您要遵守的政策以及 cmets 本身的敏感性。 除了您的方法之外,您还可以考虑以下几点:

TRANSPARENT: 您删除了所有 cmets 以及子 cmets,因为没有父级它们就没有意义。制作它们的用户不会知道他们评论了什么。

这可以保持数据库清洁并避免孤儿 cmets。

PHANTOM: 用户的叶子 cmets 被删除。带有子 cmets 的评论现在与用户帐户取消链接并分配给虚拟用户。

发布子 cmets 的仍处于活动状态的用户将可以看到他们所有的 cmets,这很好。

【讨论】:

  • 我想我会采用第二种方法,但我可能不会使用幻像用户。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-12
  • 2012-12-27
  • 1970-01-01
  • 2019-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多