含有状态的表设计
订单表是我们在做开发中,经常会涉及到的一个数据库表。这篇博文来写写关于其中的状态字段的一些想法。
今天想讲下自己对订单表状态字段的值设计的一个浅薄的思考和理解。
先说下我一年前对这个状态字段的一个值设计。
0:创建
-1:买家取消
-2:卖家取消
-3:系统取消
-4:失败
1:已支付
2:已发货
3:交易完成
4:已评价
这是一个很容易就设计出来的值。也是我之前的理解:负面状态为负数,正面状态为正数,初始化状态为0。
一开始用着,感觉还没什么问题。但时间久了,需求一变更,就发现这个值设计不对劲了。
假设有个需求,买卖双方可以对失败订单或者取消的订单进行评价。那状态值应该是多少?-4?4?
再假设另外一个需求,订单可以卖家先发货,买家再付款。那状态值怎么设计?
上面两个需求,在目前的状态值设计中,都已经无法满足需求,要么加状态值,要么加字段。
那,这个状态值应该怎么设计才可以呢?
思考了好久,然而还没在实践中使用过,如有不对,欢迎提出讨论。
由于订单的状态值,不是那种非1即2的单纯情况,是有可能出现多种状态共存的情况。所以,至少,按照我们的需求,可以把状态值设计为四位数。千分位表示订单状态,百分位表示金钱状态,十分位表示发货状态,个分位表示评论状态。看下面的值例子。
千分位
-4000:交易失败
-3000:系统取消
-2000:卖家取消
-1000:买家取消
0000:创建,初始化状态
1000:交易完成
百分位
100:已支付
十分位
10:已发货
个分位
1:买家已评论
2:卖家已评论
3:双方已评论
不知道上面有没有把我的想法写清楚。还是举例子来说明。
买家取消,但是买家已支付,未发货,未评论的订单状态值,为-1100。
交易完成,已支付,已发货,双方已评论的订单状态值,为1113。
已支付,已发货,未评论的订单状态值,为0110。
以上,就是根据我的一些浅薄的经验反思出来的经验。其实,不止在订单的状态值设计上。任何表设计中,涉及到类似状态字段这种值的设计,都可以做类似的设计。分解状态的多种类别,然后给每个类别分配一个位数。如果可以,还可以设计多几个冗余位数。
你说,如果每个状态类别的值超过9种情况怎么办?你忘了16进制这种东西。
就这样,欢迎讨论。希望对读到本文的你有所帮助
igoodful@qq.com