数据库软删除和硬删除该如何选择?

在建数据库时,很多开发人员都习惯加isDelete或者status字段,标识该条记录是否被删除,用于做所谓的数据库软删除

类似使用示例如下:
clipboard.png
clipboard.png

关于软硬删除有两个问题:

  1. 为什么不用硬删除,硬删除有什么缺点?

  2. 在以下情况下,软删除该怎么选择?

情况描述:

  1. 表格为培训班报名表,字段为studentId,classId,isDelete,分别表示学号,班级号和是否删除。

  2. 如果学生报培训班需要通过审核,改变表格字段为studentId,classId,status。status可取值为0已删除,1已生效,2审核中。这时候是添加一个status字段,还是讲原来isDelete字段扩展成status字段。

  3. 假设学生1报名班级1,报名后需要退课,那么库中(status状态)就存在一条记录为1,1,0。之后学生1再次报名班级1,则又将添加记录1,1,2。在审核通过后,需要修改status状态,而通过studentId,classId两个字段查找可以找到两条记录,在更新的时候需要添加类似于not in (0)这样的条件。

  4. 考虑到除了已删除,还有审核不通过的状态,是否每次在select或update时候,都需要加not in(0,审核未通过状态码)。如果状态码增加,之前写的sql或者xml文件都需要修改。

  5. 做硬删除则不存在这样的情况,请问如何在使用软删除的情况下更加优雅地避免多条记录匹配的情况?

阅读 18.5k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题