删除实体策略

时间:2010-07-27 15:12:41

标签: java entity

为了保持系统的一致性,我可以考虑2删除策略:

  1. 级联删除关系中的所有实体;

  2. 模拟删除(即,实际上没有任何内容从数据库中删除,但是,例如,实体中的字段deleted具有值true并且它会影响显示逻辑。

    < / LI>

    我喜欢第二种方法,但我不知道如何正确实施它。

    例如,我们假设我们开发了一个简单的博客(用户,文章,评论和其他常见的东西)。让我们看一下User实体(和一个通讯员表USER)。如果我们删除特定用户,那么他的deleted字段将具有值true。所有用户的评论将保持原样,每个读者仍然知道谁是某个评论的作者。

    所有这些看起来都很棒,但如果新用户(试图注册)将指定与某些已删除用户已有的相同的登录/电子邮件地址(其他唯一字段),我该怎么办?从理论上讲,这个独特的字段值已经是免费的并且可以采用。但是,如果有一天我决定取消删除被删除的用户呢?

    与这种情况有关的最佳做法是什么?

2 个答案:

答案 0 :(得分:2)

这实际上取决于您正在使用的系统的特定需求和要求。

通常情况下需要“软删除”功能,例如示例的第一部分,即使用户“已删除”,您也不希望从系统中删除其内容。但是,在这种情况下,您有一个用户帐户永远在使用的垮台,并且您将来无法为其他任何人重复使用该帐户。

在其他情况下,首选“级联删除”选项,但可以成为一个非常有趣的管理方式,就像许多级联约束一样,单个删除可能会影响比预期更多的表。

我认为理解您想要实现的目标很重要,因为这里的两个解决方案实际上都是有效的。只是具体的商业案例决定了哪一个最适合特定的实施。

答案 1 :(得分:0)

听起来你最好的选择是软删除(在User表中放置一个标志)。如果您希望重新激活用户,可能会出现以下情况:

用户A做一堆东西
用户A进入休眠状态 用户B创建具有相同用户ID的帐户 用户A想要回来。

您可能想要做的是将您网站上的所有内容引用到唯一的用户ID,并且永远不会删除用户。