背景
在业务表设计中,删除数据一般建议不使用物理删除,而是使用逻辑删除,在逻辑删除时,就存在一个问题:如何保证表中字段唯一性
解决方案
- 删除标志可以不局限为true、false,比如使用0表示未删除,-1、-2、-3.......表示已删除
- 利用为null的字段不会和其他字段有组合索引的效果
- 增加delete_time字段,同一时间内可能性几乎为0
如果有更好的解决方案可以留言交流
- 如果使用的是PostgreSQL
PostgreSQL支持条件索引,可以只对未被逻辑删除的记录创建唯一索引。
CREATE UNIQUE INDEX idx_code WHERE deleted = 0;
这样,只有未被逻辑删除的记录的code
必须是唯一的。