在项目的开发过程中,经常会遇到数据库表中会有一些状态字段(如INIT-》processing-》Exception-》SUccess)等,对于status字段在数据表中如何存储?目前有一下的解决方法:
(1)将状态字段对应的值映射为数字如0,1,2等来表示,这个的好处是占用的存储空间比较少,但是缺点也是非常明显的就是如果新增状态值,对应的数据表ddl中的comment没有进行相应的修改,拿到对应的状态值不知道其代表的含义,需要回查代码。
(2)将状态字段对应的值使用对应英文含义来表示,这个好处很明显就是代表的含义显而易见,但是可能存储空间确实要大一点,但是可读性提高很高。
(3)还有有一种是将(1)和(2)结合建立对应的字段表来实现。
目前我所遇到的场景是状态字段如何表示,代码的原先设计是通过状态值(数字表示)能够进行排序和范围查找,但是数字表示对于新增状态值排序(不一定按照数字大小就有问题--》将数字类型改成float/double可以解决)有问题。这种设计是将状态和排序强关联(实际上两个没有什么关系),因此新的设计将这两个含义分开,状态就是状态,排序通过业务代码自己定义排序规则(最后通过mysql 自定义排序规则 order by field(字段,排序规则列表))来实现对应的排序,这样新增状态值对应的改变也不会很大了。