要删除,更改实体的标志 VS 移动到另一个 table?
To delete, Changing the flag of entity VS Moving to another table?
我应该将列 deleted
更改为 1
以将其视为已删除,还是最好将记录移至另一个 table?
标志方法很好,因为以后的选择将搜索较少的记录。
第二种方法有点复杂,不是吗?
哪种方法更好?
如前所述 here 比较因素 如下所列。这取决于您根据以下因素做出决定
易于设置
- 软删除更容易实现,因为它只涉及更新
硬删除时的列还涉及将数据复制到
删除审核 table.
Advantage : Soft Delete
调试
- 软删除使得调试由于
deleted_flag 但是通过审计 table 调试也很容易
可能的。所以这是平手。
Advantage : NA
正在恢复数据
- 通过软删除恢复“删除”的数据非常容易,因为
它只是涉及取消设置 deleted_flag.
- 但是请注意,恢复数据的情况极为罕见。
Advantage : Soft Delete
正在查询活动数据
- 根据经验,我可以说当
开发人员忘记在
select 查询是由于哪些问题引起的。
- 如果你使用像 Doctrine 这样的 ORM 和“软删除”插件
启用,那么这将不是问题,因为 ORM 负责
添加此检查。
Advantage : Hard Delete
查看简单性
- 将 table 中的所有数据作为与视图相关的活动数据
简单(WYSIWYG - 所见即所得)
- 在硬删除中,所有“删除”的数据只会出现在审计中
table 而系统中的其余 table 将具有“活动”
数据。因此硬删除存在关注点分离。
Advantage : Hard Delete
操作性能
- 更新比删除快一点(微秒)
- 所以软删除在技术上应该比硬删除更快(
还有审核 table 插入要考虑)。
Advantage : Soft Delete
应用程序性能
- 速度
- 要支持软删除,所有 select 查询都需要有一个条件
'哪里 delete_flag = 0'.
- 在涉及 JOIN 的情况下,会有多个这样的
状况。 Select 条件较少的查询比
有条件者
Advantage : Hard Delete
- 尺寸
- 为了支持更快的软删除,我们需要为每个索引创建一个索引
delete_flag 在每个 table
- 此外,table 大小不断增加,因为 table 已经
“软删除”数据 + 活动数据。
- 查询会随着 table 大小的增加而变慢。
Advantage : Hard Delete
数据库功能兼容性
唯一索引
- 唯一索引通过防止多个
在数据库级别出现一行。
- 软删除可防止使用唯一索引。
- 此外,我们无法更新 A1-B1 的旧软删除条目
因为这意味着重写一些数据会导致丢失
记录的数据(例如:更新日期时间或其他一些 deleted_by 列
如果存在)
Advantage : Hard Delete
级联
- 对于软删除,我们不能使用'ON DELETE'级联。这
另一种方法是创建一个“更新”触发器来跟踪
deleted_flag.
Advantage : Hard Delete
我应该将列 deleted
更改为 1
以将其视为已删除,还是最好将记录移至另一个 table?
标志方法很好,因为以后的选择将搜索较少的记录。 第二种方法有点复杂,不是吗?
哪种方法更好?
如前所述 here 比较因素 如下所列。这取决于您根据以下因素做出决定
易于设置
- 软删除更容易实现,因为它只涉及更新 硬删除时的列还涉及将数据复制到 删除审核 table.
Advantage : Soft Delete
调试
- 软删除使得调试由于 deleted_flag 但是通过审计 table 调试也很容易 可能的。所以这是平手。
Advantage : NA
正在恢复数据
- 通过软删除恢复“删除”的数据非常容易,因为 它只是涉及取消设置 deleted_flag.
- 但是请注意,恢复数据的情况极为罕见。
Advantage : Soft Delete
正在查询活动数据
- 根据经验,我可以说当 开发人员忘记在 select 查询是由于哪些问题引起的。
- 如果你使用像 Doctrine 这样的 ORM 和“软删除”插件 启用,那么这将不是问题,因为 ORM 负责 添加此检查。
Advantage : Hard Delete
查看简单性
- 将 table 中的所有数据作为与视图相关的活动数据 简单(WYSIWYG - 所见即所得)
- 在硬删除中,所有“删除”的数据只会出现在审计中 table 而系统中的其余 table 将具有“活动” 数据。因此硬删除存在关注点分离。
Advantage : Hard Delete
操作性能
- 更新比删除快一点(微秒)
- 所以软删除在技术上应该比硬删除更快( 还有审核 table 插入要考虑)。
Advantage : Soft Delete
应用程序性能
- 速度
- 要支持软删除,所有 select 查询都需要有一个条件 '哪里 delete_flag = 0'.
- 在涉及 JOIN 的情况下,会有多个这样的 状况。 Select 条件较少的查询比 有条件者
Advantage : Hard Delete
- 尺寸
- 为了支持更快的软删除,我们需要为每个索引创建一个索引 delete_flag 在每个 table
- 此外,table 大小不断增加,因为 table 已经 “软删除”数据 + 活动数据。
- 查询会随着 table 大小的增加而变慢。
Advantage : Hard Delete
数据库功能兼容性 唯一索引
- 唯一索引通过防止多个 在数据库级别出现一行。
- 软删除可防止使用唯一索引。
- 此外,我们无法更新 A1-B1 的旧软删除条目 因为这意味着重写一些数据会导致丢失 记录的数据(例如:更新日期时间或其他一些 deleted_by 列 如果存在)
Advantage : Hard Delete
级联
- 对于软删除,我们不能使用'ON DELETE'级联。这 另一种方法是创建一个“更新”触发器来跟踪 deleted_flag.
Advantage : Hard Delete