方案一
目前设计的包含表结构
● 活动表(events)
● 活动门票表(events_ticket)(活动ID,票名称、图片、价格、库存、销售开始时间、销售结束时间等)
● 活动报名信息表(events_user)(姓名、公司、职位、邮箱、手机等,预留券码字段,此时为空,需要付款完生成券码)
● 订单表(order)
● 订单商品快照表(order_item)(用来保存下单时商品的快照信息,如商品图片、当时价格、数量、总额、商品标题、规格)
业务逻辑:
后台操作:创建活动-》创建门票-》发布
前台操作:访问活动-》查看活动门票-》点击购买-》填写报名信息-》点击支付-》生成报名信息记录、订单记录、订单商品记录-》支付成功-》更新订单为已完成-》报名信息里生成券码-》等待券码核销
总感觉扩展性和通用性不是很强,所以思考了另外一个方案
方案二
想把活动门票做成虚拟商品放到商品表里
● 活动表(events)
● 活动商品关联表(events_product)
● 商品表(product)(商品主题存放这里,比如某某届活动门票)
● 商品SKU表(product_sku)用于放不同的门票类型(商品ID、票名称、票图片、价格、库存、销售时间、销售结束时间)
● 订单表(order)
● 订单商品快照表(order_item)
● 订单券码表(order_voucher)
业务逻辑:
后台操作:创建活动-》创建虚拟商品(门票)-》活动里选择绑定商品?
前台操作:访问活动-》查看活动门票-》点击购买-》填写报名信息(收货人信息?)-》点击支付-》生成报名信息记录、订单记录、订单商品记录-》支付成功-》更新订单为已完成-》订单券码表生成券码-》等待券码核销
后续业务会有实物商品购买、服务购买
现在问题:
1、方案1这种设计有什么问题?方案2的设计是否更好?
2、方案2的报名信息再单独建张表?还是放到订单表里?券码表是不是也可以放到订单表里?
3、另外会设计购买票后,设计开发票,开票信息放订单表里,还是单独存一张表
我不太确定你具体业务是是哪些,那就简单说说
方案一
我个人感觉已经很符合你的业务,设计也比较独立,不需要对现有的系统进行过多的改造,这些能保证现有系统的稳定性.如果采用方案二的话,报名信息表和劵码表可以把他单独建立起来,因为如果你什么都冗余到订单表的话,后续随着业务改变或者发展,比如说券码有过期时间,你就又要在订单表加几个字段,这样造成的结果就是表字段越来越多,越来越难以维护.而且如果你把活动门票定义为商品的话,那商品表肯定需要有一个类型来进行标记到底是
门票/实物/其他类型
,不然进行数据分析的时候,运营需要知道总共有多少实物商品,有多少门票.你这怎么弄.表的职责就不单一.开票信息也一样,你就觉得能省一个关联表就冗余一下数据,如果按照你的思维,这样的话这张订单表的字段就会越来越多,导致难以维护.如果想要这样可以使用mongodb来进行订单的存储或者聚合,mongodb就很适合干这种事