数据的软删除—什么时候需要?如何去实现?.pdfVIP

数据的软删除—什么时候需要?如何去实现?.pdf

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据的软删除—什么时候需要?如何去实现? 阅读完本⽂你将会学会 什么是软删除? 如何考量是否使⽤软删除 如何在Spring⾥实现软删除 1. 前⾔ 我们在开发程序的过程中,会遇到⼀个常见的需求——删除表中的数据。 但是有时候,业务需求要求不能永久删除数据库中的数据。⽐如⼀些敏感信息,我们需要留着以⽅便做历史追踪。 这个时候,我们便会⽤到软删除。 那么什么是软删除?什么时候才能使⽤它?在本⽂中,笔者将会带你学习软删除以及如何⽤Spring Data JPA实现它。 2. 什么是软删除(Soft Delete)? 2.1 软删除的概念 软删除(Soft Delete)是相对于硬删除(Hard Delete)来说的,它⼜可以叫做逻辑删除或者标记删除。 这种删除⽅式并不是真正地从数据库中把记录删除,⽽是通过特定的标记⽅式在查询的时候将此记录过滤掉。虽然数据在界⾯上已经看不见,但是 数据库还是存在的。 2.2 软删除的实现⽅式 1. 添加布尔类型的字段 添加类似于 is_deleted 或者 is_active 或者 is_archived 的布尔型字段,以此来标记是否删除。 2. 添加时间戳字段 添加类似于 deleted_at 的时间戳字段,null表⽰未删除,⾮null则表⽰已经删除,也能获取删除的时间。 3. 将软删除的数据插⼊到另⼀个表中。 举个例⼦, order 表会有⼀个相应的 order_deleted 表,在删除 order 表中的数据,将数据复制到 order_deleted 表中。 在以上三种⽅式中,第 1种⽅式算是最普遍的,也较为简单; 第2种⽅式虽然对于第 1种⽅式会更加严谨⼀点,因为它可以获取准确的删除时间。但是第2种⽅式在查询的性能⽅⾯却是⽐较差的,因为null值会 导致全表扫描,导致查询效率⼤打折扣。 我们可以混⽤第 1种和第2种⽅式,只⽤第 1种⽅式来做条件,再⽤第2种⽅式的删除时间做补充。 第3种⽅式,思路与前两种⽅式完全不同,当数据量⼤的时候,我们可以考虑采⽤这⼀策略。 2.3 是否采⽤软删除的考量 其实在业务逻辑中采⽤“删除”这个词是不准确的。 ⽐如说,我们“删除”某种产品的时候其实是指我们“停售”了。可能以后不会再卖这种产品了,顾客搜索也不会看见这种商品,但是管理仓库的 ⼈暂时还需要管理它的库存。 所以,“删除”是不准确的说法,只是为了图⽅便。 按照Udi Dahan的解读来看: 订单不是被删除的,⽽是被“取消”的,订单取消得太晚,还会产⽣花费; 员⼯不是被删除的,⽽是被“解雇”的或者“退休”的。还有相应的补偿⾦要处理; 职位不是被删除的,是被“填补”的(或者招聘申请被驳回)。 真实的世界并不是级联的 假设市场部要从商品⽬录中删除⼀样商品,那是不是说所有包含了该商品的旧订单都要⼀并消失?再级联下去,这些订单对应的所有发票也要删除 吗?就这么⼀步步删下去,是不是公司的损益报表也要重做了? 这样看起来明显不合理吧。 那我们在实际的业务逻辑中是否采⽤软删除? 软删除的好处显⽽易见,它是⼀味后悔药,利于历史追踪或者为了审计⽬的(History tracking or audit)。 当然软删除也有弊端,不利于数据库性能(主要针对关系型数据库)的提升,可能会产⽣⼤量的冗余数据。 如果我们不需要,请不要画蛇添⾜,当我们需要的时候,请考虑业务的数据量和读写⽅式。 当需要软删除的时候,我们设置⼀个状态字段,⽤来表⽰数据是否还有效。当然,我们也可以采⽤⼀个拥有多重状态的字段:有效、停⽤、取消、 弃置等等。我们可以借助这样⼀个状态字段来回溯过去的字段,以此进⾏分析。 3. 在Spring中实现软删除 在Spring Data JPA的帮助下,实现软删除变得⾮常简单。我们只需要添加⼀些注释即可。 现在让我们来看看如何实现这⼀功能: 3.1 实体类 Product 清单3.1.1 实体类Product package com.jayxu.mydemo.persistence.entity; import javax.persistence.Entity; import javax.persistence.Table; @Entity @Table(name = product) public class Product { private long id; private String name; private double price; private String desc

文档评论(0)

139****1921 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档