<分区>
为了保持系统的一致性,我可以考虑两种删除策略:
级联删除关系中的所有实体;
模拟删除(即没有真正从数据库中删除任何内容,但是,例如,实体中的字段
deleted
具有值true
并且它会影响显示逻辑) .
我喜欢第二种方法,但我不知道如何正确实现它。
例如,假设我们开发一个简单的博客(用户、文章、评论和其他常见内容)。让我们看看 User
实体(和对应的表 USER
)。如果我们删除某个用户,那么他的 deleted
字段的值为 true
。所有用户的评论都将保留在原处,每个读者仍然会知道某个评论的作者是谁。
这一切看起来不错,但是如果新用户(正在尝试注册)将指定与某些已删除用户已经拥有的相同登录/电子邮件地址(其他唯一字段),我该怎么办?理论上,这个唯一字段值已经是免费的,可以拿走。但是,如果有一天我决定取消删除那个已删除的用户怎么办?
与这种情况相关的最佳做法是什么?