软删除还是硬删除?各位都是数据库都是怎么设计的?

一些数据可能会被用户主动删除,或者管理员删除(内容安全、审核等),之前的做法都是用 status 字段,或者增加一个 deleted 标志字段(boolean),但这样做的话一些 SQL 语句不太好写,各位都是怎么做的?最佳实践?

database
249 views
Comments
登录后评论
Sign In
·

一些地方法规要求用户数据不能硬删除,表结构不复杂的话可以软删除,不过 delete 也是 OK的,可以通过数据备份解决法规的问题

·

软删除的主要目的是避免使用 delete 语句,导致一些数据丢失的重大问题,合理的数据库备份归档习惯可以避免这个问题。

我们比较常用的方法是用另一个归档表,避免 status <> 'delete' 或 deleted 判断,不然很简单的查询操作都需要判断是否删除,比如 select count(id) from message_table ,更不用提复杂查询了。

归档表 + 测试用例覆盖可以解决大部分删除场景