聊一聊项目中的软删除

举报
仙士可 发表于 2023/06/21 17:13:54 2023/06/21
【摘要】 有许多程序员,在知道一个所谓的概念之后,就非得将这个概念强加到自己的项目中就比如今天说的软删除,随随便便的一个数据表,都是加软删除.那么真的有必要吗?软删除的应用场景在哪?什么是软删除在我们之前写程序的时候,经常需要删除一条记录,删除语句则是: delete from table where condition=conditionValue复制这个时候,在数据库中是真正意义上的删除,你没法再...

有许多程序员,在知道一个所谓的概念之后,就非得将这个概念强加到自己的项目中

就比如今天说的软删除,随随便便的一个数据表,都是加软删除.那么真的有必要吗?软删除的应用场景在哪?

什么是软删除

在我们之前写程序的时候,经常需要删除一条记录,删除语句则是: 

delete from table where condition=conditionValue
复制

这个时候,在数据库中是真正意义上的删除,你没法再通过select语句查出来,而这个做法,就叫硬删除

回到刚刚那个的逻辑,假设有一个商品表,订单表,订单表关联了商品id 这个时候,需要删除这个商品,如果直接数据库删除的话,将导致订单表查不出商品信息,这个时候

我们可以给商品表增加一个 删除标记 isDelete  删除商品数据时,不去执行delete,而是去执行update:

update goods_list set isDelete=1 where goodsId=1
复制

同时,后台商品列表只显示 isDelete=0的商品列表

这个时候,商品列表在项目层不会显示已删除的商品,同时在订单表又能查出相关的商品数据,以便于后期查账等

这个删除方式则叫 软删除

在项目中,软删除和硬删除都意味着是真正的删除,理论上项目不能对已删除的数据做其他操作

在数据库表示层中,硬删除表示真正的删除,软删除则表示记录依然存在,可以用于数据恢复,或者其他业务对账

软删除的应用场景

上面我们知道了软删除的含义,那么什么表有必要增加软删除呢?是不是所有表都可以加上软删除.

所有表都可以加软删除,但是有些表增加软删除并没有意义

只有一些重要数据表,关联表相关才有必要增加软删除功能

例如在商城项目中,

刚刚所说的商品删除,需要拥有关联订单表

用户端删除订单之后,为了做用户数画像,可以做成软删除方便分析数据

用户修改头像之后,也可以保留旧头像做数据分析

日志过期删除之后,没有查看的意义

商城首页的菜单栏删除了,没有恢复的意义

商品分类删除了,完全可以重新增加一个一模一样的,没有恢复的意义

删除后数据还具有意义的数据才需要做软删除功能

软删除衍生

那么,删除后数据还具有意义的就必须做软删除吗?例如刚刚的订单表商品关联的

如果要业务实现完善,理应做订单商品快照,也就是每次下单,都会将商品表的商品数据全部复制一份,关联上订单

这样商品数据真删除了,或者商品修改了信息,订单表也能看到那时候下单时的商品数据,价格等

重要数据需要做好冗余,而不是一味的关联

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。