尝试给orm新增唯一索引,最后还是决定不加了
前言
有群友比较想要orm
可以设置唯一索引,方便类似给账号做绑定手机号,绑定邮箱这种需求,其实对于这类需求,我是建议新建一个表做对应映射关系,但是又考虑到,如果能在原本的表建唯一索引,或许做这类需求要简单从容许多。虽然这又会给orm
增长一些的复杂度,但是我抱着试一试的心态,开始对本就复杂的orm
解剖重构,先把耦合的索引代码抽离独立,方便主键,唯一索引一起用,然后新增唯一索引,接通了查询,写了查询的测试,这时候我觉得一切都很顺利,感觉唯一索引是可以添加的。直到有一天晚上睡觉的时候,突然想起,类似绑定手机号这类需求,新增的账号一开始可能没有绑定手机号,就需要有NULL值,但是orm
从设计之初到现在,都是不许NULL值的出现的,业务没有填值的项,都会给0
或者空串
的默认值,为了兼容NULL值,需要做大量改到,索引兼容空串,处理联合索引某个为空的情况,写业务也需要考虑字段为唯一索引字段为nil
的情况,这涉及到大量的改到,增加了过多的复杂度,影响到了可维护性,打破了orm
长期使用带来的稳定性,所以我决定还是不加了。
多表方案
这里说一下使用多表方案解决这类需求。
账号表
1 |
|
手机号映射
1 |
|
这样就可以通过phone
找到对应account
了。
尝试给orm新增唯一索引,最后还是决定不加了
https://huahua132.github.io/2025/03/22/skynet_fly_ss/orm_unique_index/