聊一聊项目中的软删除

简介: 聊一聊项目中的软删除

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

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

什么是软删除

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

delete from table where condition=conditionValue

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

回到刚刚那个的逻辑,假设有一个商品表,订单表,订单表关联了商品id

这个时候,需要删除这个商品,如果直接数据库删除的话,将导致订单表查不出商品信息,这个时候

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

update goods_list set isDelete=1 where goodsId=1

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

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

这个删除方式则叫 软删除

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

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

软删除的应用场景

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

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

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

例如在商城项目中,

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

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

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

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

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

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

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

软删除衍生

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

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

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

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

目录
相关文章
|
存储 前端开发 JavaScript
潮玩宇宙大逃杀无聊猿卷轴模式系统开发详细规则丨步骤需求丨方案项目丨技术架构丨源码功能
确定游戏类型和规则:明确无聊猿卷轴模式游戏类型和游戏规则,包括敌人类型、地图设计、任务类型、战斗机制等。
回顾 | 5G通信领域的应用研讨会内容已全部更新完毕,精彩内容全在这里!
各专家在5G通信领域的应用研讨会上所发表的演讲内容已经全部展示完毕
回顾 | 5G通信领域的应用研讨会内容已全部更新完毕,精彩内容全在这里!
|
自然语言处理 API Python
除庄周梦蝶外,庄子还讲过哪些梦你知道吗?新故事引出新版本——
除庄周梦蝶外,庄子还讲过哪些梦你知道吗?新故事引出新版本——
194 0
|
机器学习/深度学习 编解码 并行计算
仅做两项修改,苹果就让StyleGANv2获得了3D生成能力
仅做两项修改,苹果就让StyleGANv2获得了3D生成能力
111 0
|
iOS开发 MacOS
iOS 的这个功能你肯定听过,但用对它能极大提升效率
iOS 的这个功能你肯定听过,但用对它能极大提升效率
115 0
|
数据挖掘 程序员 数据库
聊一聊项目中的软删除
聊一聊项目中的软删除
176 0
|
前端开发
请务必收下这10+个加载特效,保证让你的项目大放异彩⭐(三)
请务必收下这10+个加载特效,保证让你的项目大放异彩⭐(三)
|
前端开发
请务必收下这10+个加载特效,保证让你的项目大放异彩⭐(一)
请务必收下这10+个加载特效,保证让你的项目大放异彩⭐(一)
|
前端开发
请务必收下这10+个加载特效,保证让你的项目大放异彩⭐(四)
请务必收下这10+个加载特效,保证让你的项目大放异彩⭐(四)