美文网首页
数据库表逻辑删除设计

数据库表逻辑删除设计

作者: 定金喜 | 来源:发表于2023-01-21 17:56 被阅读0次

关系型数据库一般是存储客户的业务数据,这部分数据非常重要,如果物理删除了,想找回来需要的成本较高,而且定位很多问题时,因为数据已经被删除了,导致定位起来也比较麻烦。所以没有特殊情况下,一般不建议做物理删除,所以表设计的时候需要有字段标识记录是否删除。

传统的方案:
增加is_del字段,0表示未删除 1表示删除
这种方案存在的问题:
对于大部分情况,这种方案是没有问题的,但是有一些情况,唯一索引可能会存在冲突,导致新增数据可能会违反唯一键冲突。以用户工资表为例:

工资表

这个表的唯一索引应该是user_id+date+is_del,每个员工一个月只能有一条记录,如果工资计算错了,需要重新计算,那么旧的数据就需要删除,is_del=1,如果重新计算多次就会有多条is_del=1的记录,唯一键冲突,就会报错,这种情况下传统的方式会存在问题。

比较通用的方案:
以card表举例:

card表
其中del字段只做删除和非删除状态判断,业务表自己的status字段与这个独立,不要混淆在一起。
新增是del默认就是0
删除的时候从delete语句改为update
原:
delete from card where cd_id='123456';
改为逻辑删除:
update card set del=id where cd_id='123456' ;
或者update card set del=#{当前时间戳} where cd_id='123456' ;

注意影响点:
1.对唯一索引的影响
以上面的card表为例,如果唯一索引为cd_id,修改为逻辑删除后唯一索引要变成:cd_id+del,如果这个唯一索引每次新建都是不一样的(uuid),那唯一索引可以保持不变,建议最好按照这种建立唯一索引
2.对查询的影响
基本所有的查询语句默认都需要加del=0的查询条件

相关文章

  • 数据库表逻辑删除设计

    关系型数据库一般是存储客户的业务数据,这部分数据非常重要,如果物理删除了,想找回来需要的成本较高,而且定位很多问题...

  • mongodb基本命令

    连接数据库 显示所有数据库 使用数据库 查看表 插入数据 查询表数据 修改表数据 删除表数据 删除表 删除数据库

  • 答辩可能遇到的简单提问

    怎么连接数据库? 通过JDBC连接mysql数据库 数据库删除是逻辑删除还是物理删除? 逻辑删除.修改的只是数据的...

  • PHP增删改查(含源代码)

    代码逻辑实现思路: 连接数据库, 列表:查询表数据进行循环展示 删除:接受删除的id 直接执行删除,然后下面继续查...

  • Sequelize | 2. 模型 - 删除表

    删除某张表 删除数据库所有表

  • DDL-数据定义语言

    1、库 创建数据库 删除数据库 2、表 创建表 删除表 3、列 增加列 删除列 修改列 4、键 添加主键 删除主键...

  • 数据库设计

    1、为什么要进行数据库设计? 需求分析 逻辑设计ER图 物理设计 维护优化=》新建需求表,索引优化,大表拆分 需求...

  • 数据库中的简单操作

    1.0 删除数据库中的某个数据库 2.0 删除数据库中的某个表 3.0 删除数据库中的表全部的内容 4.0 删除数...

  • MySQL常用语句

    创建数据库 删除数据库 修改数据库名 创建新表 根据旧表创建新表 删除表 修改表的名字 增加一个列 删除一个列 修...

  • Mysql学习——数据库基础操作(1)

    Mysql创建数据库Mysql删除数据库Mysql创建表Mysql删除表Mysql添加表数据Mysql修改表数据M...

网友评论

      本文标题:数据库表逻辑删除设计

      本文链接:https://www.haomeiwen.com/subject/oryxhdtx.html