聊一聊项目中的软删除
有许多程序员,在知道一个所谓的概念之后,就非得将这个概念强加到自己的项目中
就比如今天说的软删除,随随便便的一个数据表,都是加软删除.那么真的有必要吗?软删除的应用场景在哪?
什么是软删除
在我们之前写程序的时候,经常需要删除一条记录,删除语句则是:
delete from table where condition=conditionValue
复制
这个时候,在数据库中是真正意义上的删除,你没法再通过select语句查出来,而这个做法,就叫硬删除
回到刚刚那个的逻辑,假设有一个商品表,订单表,订单表关联了商品id 这个时候,需要删除这个商品,如果直接数据库删除的话,将导致订单表查不出商品信息,这个时候
我们可以给商品表增加一个 删除标记 isDelete 删除商品数据时,不去执行delete,而是去执行update:
update goods_list set isDelete=1 where goodsId=1
复制
同时,后台商品列表只显示 isDelete=0的商品列表
这个时候,商品列表在项目层不会显示已删除的商品,同时在订单表又能查出相关的商品数据,以便于后期查账等
这个删除方式则叫 软删除
在项目中,软删除和硬删除都意味着是真正的删除,理论上项目不能对已删除的数据做其他操作
在数据库表示层中,硬删除表示真正的删除,软删除则表示记录依然存在,可以用于数据恢复,或者其他业务对账
软删除的应用场景
上面我们知道了软删除的含义,那么什么表有必要增加软删除呢?是不是所有表都可以加上软删除.
所有表都可以加软删除,但是有些表增加软删除并没有意义
只有一些重要数据表,关联表相关才有必要增加软删除功能
例如在商城项目中,
刚刚所说的商品删除,需要拥有关联订单表
用户端删除订单之后,为了做用户数画像,可以做成软删除方便分析数据
用户修改头像之后,也可以保留旧头像做数据分析
日志过期删除之后,没有查看的意义
商城首页的菜单栏删除了,没有恢复的意义
商品分类删除了,完全可以重新增加一个一模一样的,没有恢复的意义
删除后数据还具有意义的数据才需要做软删除功能
软删除衍生
那么,删除后数据还具有意义的就必须做软删除吗?例如刚刚的订单表商品关联的
如果要业务实现完善,理应做订单商品快照,也就是每次下单,都会将商品表的商品数据全部复制一份,关联上订单
这样商品数据真删除了,或者商品修改了信息,订单表也能看到那时候下单时的商品数据,价格等
重要数据需要做好冗余,而不是一味的关联
- 点赞
- 收藏
- 关注作者
评论(0)