java - 删除实体策略

标签 java entity

<分区>

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

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

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

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

例如,假设我们开发一个简单的博客(用户、文章、评论和其他常见内容)。让我们看看 User 实体(和对应的表 USER)。如果我们删除某个用户,那么他的 deleted 字段的值为 true。所有用户的评论都将保留在原处,每个读者仍然会知道某个评论的作者是谁。

这一切看起来不错,但是如果新用户(正在尝试注册)将指定与某些已删除用户已经拥有的相同登录/电子邮件地址(其他唯一字段),我该怎么办?理论上,这个唯一字段值已经是免费的,可以拿走。但是,如果有一天我决定取消删除那个已删除的用户怎么办?

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

最佳答案

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

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

在其他情况下,首选“级联删除”选项,但它可能成为管理起来非常有趣的野兽,因为有许多级联约束,单个删除可能会影响比预期更多的表。

我认为了解您想要完成的任务很重要,因为这里的两种解决方案实际上都是有效的。只是特定的业务案例决定了哪个最适合特定的实现。

关于java - 删除实体策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3345066/

相关文章:

java - LWJGL 只旋转一个物体

Java重构异常处理最佳实践

python - 如何使用 Python 2 和 Python 3 中的内置库 ElementTree 等实体解析 HTML?

c# - Entity Framework - SQL 查询 - 限制和排序依据 - SQL Server

对 JPQL 实体列表进行排序

Symfony 表单实体类型缓存

java - 比较覆盖排序

java - 无法使用ajax调用spring Controller

java - 将 Twitter 流 API 集成到 Java Web 应用程序中

hibernate - 在 ManyToOne 关系中使用 Cascade