软删除还是硬删除?各位都是数据库都是怎么设计的?
一些数据可能会被用户主动删除,或者管理员删除(内容安全、审核等),之前的做法都是用 status 字段,或者增加一个 deleted 标志字段(boolean),但这样做的话一些 SQL 语句不太好写
软删除的主要目的是避免使用 delete 语句,导致一些数据丢失的重大问题,合理的数据库备份归档习惯可以避免这个问题。
我们比较常用的方法是用另一个归档表,避免 status <> 'delete' 或 deleted 判断,不然很简单的查询操作都需要判断是否删除,比如 select count(id) from message_table
,更不用提复杂查询了。
归档表 + 测试用例覆盖可以解决大部分删除场景