软删除VS硬删除

时间:2011-11-10 15:27:16

标签: php mysql database-design user-experience

我正在建立一个使用基于评论的票务系统的系统。我希望得到一些关于将用户标记为已删除或完全删除记录的想法。

理想情况下,我希望系统不受旧帐户的影响,但同时删除用户,故障单系统中的评论可能没有意义。

有没有人想出解决这类问题的方法。到目前为止我的想法:

  1. 删除用户帐户,评论和所有其他相关数据。
  2. 将用户标记为已删除,如果他们再次订阅,则创建一个全新的帐户。
  3. 将用户标记为已删除但如果用户尝试再次订阅则更新并取消标记为已删除而不是添加新用户。
  4. 仅删除用户帐户。然后在获取评论等时检查关联的ID,如果没有找到结果,则显示评论并显示消息“用户帐户已被删除”。
  5. 您怎么看?

5 个答案:

答案 0 :(得分:1)

我会说第三种选择是最好的选择

我的理由是存储在数据库中的任何票证都应该保留数据库的生命周期,如果您尝试从数据库中删除用户,您将删除该用户对数据库中任何票证的引用。

(如果数据库允许你删除它,因为用户的id将链接到他/她可能创建的任何门票)

当该用户在票务系统中创建新帐户时,他可能在几个月前创建的票证已消失,现在可能已由null创建。

答案 1 :(得分:0)

我将始终使用最后一个解决方案:仅删除用户帐户并在海报的帐户不再存在时显示“已删除帐户”消息。如果您不允许用户更改其用户名,您还可以保存海报的用户名(超出其ID),如果用户删除了他/她的帐户,则将其显示为纯文本,如果用户仍处于活动状态,则显示为链接。

答案 2 :(得分:0)

如果您代表用户< - >评论与FOREIGN KEY的关系,无法删除用户而不删除评论或将评论的关联用户更新为NULL或指向某个“已删除用户”假用户帐户(在任何一种情况下,都会丢失有关发布评论的用户的信息。)

答案 3 :(得分:0)

这取决于你的使用案例 就个人而言,我永远不会完全删除数据库中的用户帐户。

因此选项1已经出局。 (但那只是我)
选项2有问题,你会有很多悬空的用户帐户 选项3看起来是最佳选择-cough- 审计跟踪 -cough -

选项4遇到问题,您有另一个表的链接,但该数据已被删除。

答案 4 :(得分:0)

我写的票务系统基本上是第3号。其他任何东西都会毁掉你需要保留的任何审计线索。

如果你需要摆脱旧的东西,一种方法是设置清除旧票。然后,当帐户的所有相关票证都消失后,您可以删除该帐户。