为了账号安全,请及时绑定邮箱和手机立即绑定

业务伪删除该这么设计?

业务伪删除该这么设计?

梵蒂冈之花 2018-09-02 11:23:59
业务伪删除该这么设计?现在大数据时代,数据是很重要的,所以对于一些数据系统一般不会做物理删除,删除也会有备份,所以需要设计一套伪删除的逻辑,但在下才疏学浅,对这一套逻辑了解不深,想向各位请教请教!下面是鄙人搜索得来的两种方法,但个人觉得两种方法都不是特别好,想问下各位有什么更好的方法没?1.一般系统采用记录加DeleteAt字段来判断数据是否删除,但这样每次查询(单表,多表联查)都需要加上DeleteAt判断,系统上复杂了一个维度。而且如果数据又有唯一索引时,就需要加上DeleteAt字段一起做唯一索引,这样随着数据量增加,索引就会消耗很多的空间。2.还有一种做法是加一张表做删除归档表,删除的记录从表中删除然后迁移到删除归档表中,这样伪删除也完成了,但如果做数据恢复的时候就比较麻烦了,(删除归档表怎么设计暂不清楚,想请教请教)。回复一下回答里只用一个status字段标记数据状态的不好之处只用一个status字段标记,当有唯一键存在时有缺陷,这种唯一键的场景还比较多。讲下场景:系统要求一个用户只能创建一个项目,当然项目我可以删除重建。只有一个status字段标记项目状态, 1 启用 2 删除project表 user_id project_id status 三个字段,组成唯一键user_id project_id statusu1 p1 2u1 p2 1好上面就是用户u1创建一个项目p1后,删除重新建立了项目p2,然后现在来看,如果用户把p2也删除,就会出现删除异常情况,违反了表唯一键约束,所以只用一个status字段标记的缺点就暴露出来了。之前在本人的项目中也是采用status字段标记的方式,如果删除后又重建就会先去找已经删除的记录重新启用,但这种做法是不对的,因为之前删除的项目关联了其他记录,或者存在一些之前id标记的数据统计记录,如果启用之前的删除的项目记录,在需求上就不对了。
查看完整描述

2 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

两种方法都挺好的。

删除归档表就是。比如你有一个content表,新建一个content_deleted表。每当在content表中删数据的时候就同时把该数据新增到content_deleted表里面.

我没有更好的方法,伪删除本身就是一个需求,一个需求会让程序的复杂度增加我认为是一个正常的操作


查看完整回答
反对 回复 2018-09-02
?
HUH函数

TA贡献1836条经验 获得超4个赞

两种方式都在用

说下第一种,我用status字段表示,删除时就更新该记录的字段值值为-1。这么做还有几个好处,比如-1代表删除,0代表停用,1代表启用....还可以扩展更多用法。


查看完整回答
反对 回复 2018-09-02
  • 2 回答
  • 0 关注
  • 853 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号