我想在 StackOverflow 上实现一个软删除功能,其中项目并没有真正删除,而只是隐藏了。我正在使用 SQL 数据库。这里有 3 个选项:
添加一个
is_deleted
布尔字段。- 优点:简单。
- 缺点:没有日期记录。强制我
is_deleted = 0
在每个查询中添加一个。
添加
deleted_date
日期字段。NULL
如果未删除,则设置为。- 优点:有日期。
- 缺点:仍然使我的查询混乱。
对于以上两者
- 它也会影响性能,因为有所有这些无用的行。它们仍然必须在索引中维护。此外,在获取未删除(大多数)行时,列上的索引
deleted
也无济于事。需要全表扫描。
另一种选择是创建一个单独的表来保存已删除的项目:
- 优点:在查询未删除的行时提高了性能。无需为我对未删除行的查询添加条件。索引维护更容易。
- 缺点: 复杂性:删除和取消删除都需要数据迁移。需要新表。参照完整性更难处理。
有更好的选择吗?