一个项目中多种订单的表设计

目前在做的一个项目是租赁商城,由于租赁过程会涉及支付押金、返还时支付租金、返还时退回押金、充值等等的业务,所以会有各种不同的订单(租赁支付押金订单、返还支付租金订单、返还押金退还订单、用户充值余额订单、邮寄租赁订单、邮寄返还订单……)。

目前所有订单是在一个订单表里,但是由于订单种类非常多,所以各种订单的业务字段都放在这个订单表里(比如支付押金的押金支付时间,返还时支付租金的时间……),而且这些业务字段并不是每个订单都要用,所以就很累赘。另外还有一个问题就是订单状态很难设计,比如租赁的订单会有未支付、正在使用、已返还……而邮寄租赁订单又会有邮寄中……等的状态,所有状态都堆在这个订单表根本就不行了。

所以现在在想一种方法就是把订单的通用信息(比如订单号、金额等)提出来作为订单主表,然后通过订单类型分出各种类型的表(如租赁订单表、返还订单表、充值表等),每个订单分表有自己的业务字段、状态,并从属于某个订单主表记录。我并不知道的做法是否适当,特来请教一下各位大神!

订单主表
order(id ,order_no ,order_type(比如是"lease"类型))

租赁订单分表
lease_order(id ,order_id ,pay_time ,status ,.....)
阅读 12.9k
5 个回答

分门别类做订单表,在汇总表里做关键

直接拆成多个订单表就好,没有必要再做个订单主表吧,想要取出某个用户订单信息在订单表加上用户id就行了,想做统计是另外的需求,就不需要在业务系统里面做了,报表系统随便处理,业务表越简单越好,不需要展示给用户的信息就不要出现在业务系统表里面

主表作为订单抽象表,从数据库设计上看属于常见的做法,尤其是在数据仓库建模方面。

关键看这个抽象的表对业务系统的作用如何,我想到的好处是:
1、方便做订单的汇总,不用多个表查询后做union
2、订单有一些通用的业务操作,可以直接在订单主表完成,封装后直接调用,不需要在每个表执行类似的操作。

如果根据业务场景分析,每次业务主表的操作,都需要和子表的配合,那抽象出的主表就意义不大了,反而会增加开发和运维的工作量。

  1. 就一张表!简单粗暴高效!

  2. 业务字段累赘,通过定义不同的订单model来屏蔽不需要的字段

  3. type(订单类型) + state(订单状态)两个字段解决状态管理问题

多种订单的话,表还是分开吧,存一张表的话,后面会很乱

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题