关于状态(state)字段的设计方案

  以账号的状态为例,假设在只有正常和注销两种状态的前提下,0=注销|1=正常,这种设计方案是非常符合编程思维的,因为0=false=假|1=true=真,在逻辑上也很严谨。
 
  但是这种方案并不利于扩展,例如后期要增加锁定、过期、拉黑三种状态,此时就会变成:
 
  0=注销|1=正常|2=锁定|3=过期|4=拉黑
 
  我们要查出所有非正常账号就需要用 WHERE `state` IN (0, 2, 3,4) 作为查询条件,这也没有什么问题,我们再换一种设计方案:
 
  0=正常|1=注销|2=锁定|3=过期|4=拉黑
 
  还是查出所有非正常账号,我们可以用 WHERE `state` > 0 作为查询条件,可以看出这种设计方案写出来的SQL更加优雅。
 
  总结①:0=正常|1=注销|2=锁定|3=过期|4=拉黑这种设计方案不应该以编程思维来看,而应该以错误码思维来看,这样理解起来就简单多了。
 
  总结②:如果能确保字段只有 真/假、是/否、yes/no、true/false 两种值,且后期不会增加新的值,那么可以确定使用1=真|0=假这种方案更合适。

Copyright © 2024 码农人生. All Rights Reserved