请教一下关于 MYSQL,有一个订单的状态字段,用什么类型来设计比较好。

查看 83|回复 10
作者:go522000   
我现在数据库是使用 5.7 版本,但不熟悉 MYSQL ,所以习惯沿用以前旧的习惯。
以下为我的作法,感觉很不合理,希望学习一下。
比如:
state int ( 2 )  ,表示:0 待支付,1 已支付,2 已发货...6 交易完成
然后这个字段用 MYSQL 的注释把 123 这些表示什么注释好。
或者增加一个新的字段,把不同的状态的名字存储起来,比如:
state_value varchar ( 10 )  。 用来记录状态的描述
大概这样设计。
然后就会遇到一些问题,假设未来增加一个备货中的状态,这个状态在 1 与 2 之间,就会很为难,那么在最后面增加一个 7 备货中,很奇怪的样子。
-----
搜索了一下,5.7 已经支持 JSON 格式了。
那么未来新的项目是否可以设计为:state json 这种类型,把状态 ID 与描述一起存进去,比如:{state:1,value:'PAY_SUCCESS',description:'已支付'}
类似这种方式?这样会不会在未来遇到排序很卡或者不好搜索之类啥的,影响非常大?
或者,是否可以升级到 8.0 版本,支持 ENUM 类型?
ENUM 索引会不会更快点?
数据库小白,求指点。
dcsuibian   
直接存字符串,对运维最友好
kk2syc   
加个 7 最方便,不要代码洁癖
Cu635   
感觉是要么就是只微调,不大动直接加个状态 7 ,不用管奇怪不奇怪了;要么大升级,“是否可以升级到 8.0 版本,支持 ENUM 类型”这种最合适,从根子上就不会奇怪的做法。
nzynzynzy   
有个客户的系统设计是 100 ,200 ,300…900 。这样你可以先用 100 ,200 ,等中间有了居间的再用 130 ,再精细还有 132 、133…感觉很合理。
pweng286   
@nzynzynzy 还真是.
coderYang   
@nzynzynzy 学到了,还真是,类似于 http 状态码一样的设计
Bylinz   
其实 1 2 3 4 只是你觉得的顺序,对程序来说,这随便什么都行。
如果程序早期的定义看起来不舒适,可以通过文档弥补。
不建议重新发明创造,因为你新加的东西也不一定能满足以后的需求,稳定才重要。
go522000
OP
  
@nzynzynzy 谢谢,是个好主意。
suaxi   
同四楼大佬的做法,部分场景下排序字段的值我们这边也是这样设计的,中间间隔 10
您需要登录后才可以回帖 登录 | 立即注册

返回顶部