首页 > > > 订单状态的表设计问题。
这个订单是类似电商的订单。目前设计的表有订单表(order)、订单操作表(order_operate)、订单评论(order_comments)、订单明细(order_detail)。订单状态变化:开单、财务审核、付款、拣货、打包、发货、收货、评论。
订单字段记录基本信息:ID(自增)、单号、创建时间、开单人、客户、订单状态。
订单操作表:ID(自增)、订单号、操作动作、操作人、操作日期。
订单评论表:ID(自增)、订单号、评论人、评论时间、内容。
问题说明:
(1)开始时,订单这个表是包含订单表和订单操作表。但后来想,订单表应该只是包括订单的基本信息即可,至于订单的操作动作,应该是另一个表来保存这些业务动作,以便扩展。所以把一张表拆分了两个表。这个办法比一个表好吗? 如果是同一个表的情况下,在订单状态更新时,要针对不同角色的操作,所以在更新的sql中,首先要判断是那个角色,然后是判断是什么操作。有四个角色就需要有四个if来判断(我是使用拼接sql的方式),因为更新的字段不一样(开单人、打包人、发货人等都有对应的字段)。如果是两个表的方式,只需要在订单操作记录表插入和更新某个角色的动作记录,不会出现单表的角色与字段的对应问题,直接把业务界面的角色和动作保存即可。另外如果在单表的情况下,使用ORM,也需要告诉它更新是那个字段吧 ?(这个我不熟)。所以ORM和直接拼sql可能是一样的问题。(这个问题不敢确定)
(2)订单评论表的拆分,是基于它对的订单的状态影响不是核心业务流程,所以拆分。类似的动作我也会拆分。
(3)在订单状态中,有些中间状态的,例如在拣货中,如果发现没有货了,需要挂起此单,然后去调货,货够了,再继续下一步。类似这些状态的变化, 我也放在订单表中的状态字段。但中间状态的增多的话,会有查询上的麻烦。比如,开单人要查询自己未收货的订单,这是不管什么中间状态的。那么在订单的状态值中,不管是拣货、拣货挂起、打包、打包挂起、装货、发货、发货遇到大雨等等,所以sql语句中 in (........)会有很多值,都是未完成的订单状态,这样做不利于扩展。现在,我把 in (.....)这一类的sql都放在数据库的自定义函数中,不是办法的办法。
想想这个订单状态也是头疼,企业内部的不同角色有不同的操作,客户也有不同的查询订单需求。请教大家,上面的思路怎么样? 怎么去变得更好?先谢谢了。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4692/viewspace-3134879/ ,如需转载,请注明出处,否则将追究法律责任。