入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

数据库优雅地实现软删除

创建时间:2013-12-01 投稿人: 浏览次数:4174

一提到软删除, 大家一定会说到, isDeleted这个字段, 或者叫status,关于这个可以看一下其他博友的文章


但是这种设计真的好吗, 其实针对不同的场景, 我们可以采用不同的设计方案来减少设计的复杂度。


考虑下面的场景: 你是后台API提供方, 调用者每天会定时向你发送一批全量数据, 这些数据每天都会有一定的差别, 比如新增了xx新的记录, 减少了xx条老的记录, 还有xx条记录不变, 你需要支持每天的实时查询, 保证数据的实效性, 过期数据不应该被显示。


如果使用isDelete这种方案, 试想一下, API后台的逻辑实现会比较复杂。难道你要求调用者向你提供那些数据应该被软删除么? 只能你自己在代码中做一个判断, 比如今天有哪些数据的 last_update_time仍旧没变的, 说到last_update_time, 那这个字段就是本文的亮点。 你只需保证有这一列, 并且使用数据库的控制, 比如mysql的 on update currenttimestamp, 那么你就无需做多余的判断, 只需要无脑的接受数据, 更新or插入就好了, 向外提供查询接口的时候只需要sql中where条件加一个last_update_time=今天就OK了。 

这种方案的局限性也有, 就是在一些订单或者其他有复杂逻辑的地方不适用。 但起码证明了说每一个表设计都需要有last_update_time这个字段。

声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。