背景
出于系统安全考虑,数据库的数据会尽可能采用逻辑删除的方式。
逻辑删除带来的问题
1. 数据冗余
2. 增加开发复杂度
3. 增影响惟一性约束
- 若表中字段要求唯一约束,旧数据逻辑删除后,将不能插入同数值的新纪录;
- 若不为字段设置唯一性约束,每次系统数据时,需先查询是否存在未删除的同数值。
解决方案:
将唯一约束字段和删除相关的字段创建成组合唯一索引。
-
将删除标记设置默认值(例如0),将唯一字段与删除标记添加唯一键约束。当某一记录需要删除时,将删除标记置为NULL
由于NULL不会和其他字段有组合唯一键的效果,所以当记录被删除时(删除标记被置为NULL时),解除了唯一键的约束。此外该方法能很好地解决批量删除的问题(只要置为NULL就完事了),消耗的空间也并不多(1位 + 联合索引)。 -
NULL在某些情况下是存在一些问题的,删除时可以将删除标记更新为主键,这样同样保证了唯一约束字段和删除标记组合索引的唯一性。
-
还可以用另外一种方案,添加一个删除时间delete_time的字段,设置一个不为NULLl的默认值,和惟一字段组成联合唯一索引,当进行逻辑删除的时候同时要更新delete_time,这样同样可以保证惟一性。
参考:
https://mp.weixin.qq.com/s/sfPR2_uIxEtL61yQOB7-ng
标签:约束,逻辑,删除,标记,数据库,唯一,字段,NULL From: https://www.cnblogs.com/DeepInThought/p/17529643.html