前篇回顾
租车信息系统数据库设计(1)中我们根据租车系统最基本的一些需求,设计出了如下表结构:
有朋友看了这个结构图后问我为什么对于订单没有设计成主从表(即分为OrderHeader,OrderDetail)。
订单的主从表设计在ERP系统中非常常见,在OrderHeader中存放客户信息,在OrderDetail中存放此客户本次订购的多种产品(每种产品若干数量),这种设计也更符合范式。我当初在进行设计时,首先想到的也是主从表设计,但思考了租车的需求场景,我最后选择了现在的这一设计。在我的电影院票务管理系统数据库设计(2)中对于类似问题进行过详细的分析,所以这里不再展开。但现在的结构也未必是最符合实际需求的,毕竟我是闭门造车,大家可自己思考提出更合理的设计方案。
Order状态问题
在上一篇中我们设计了6种Order状态,分别是:输入Entered,提交Booked,预约Reserved,使用中Inuse,交还Returned,取消Cancelled。对于正常Order的结束状态为Returned,但我在和曾经租过车的同事闲聊后,我觉得需要再加一个Closed状态作为Order结束状态。一般顾客在还车后,租车公司还会收取约600元的预授权,租车公司会检查该车在租用期是否有违章罚款,如若没有,这笔费用将在约两个月后打回顾客卡内。只有到这个时候这个Order才真正结束了(预授权的600元也需要记录在Table_Order表中,大家可以自行加一些列,本文为简化不列出了)。
进一步的分析与设计
第一篇中的设计不能满足现实需求的重要一点是,系统中没有记录顾客实际取车和还车的时间,这对于计算实际费用是至关重要的。当前的设计也无法回答门店库存车辆的变化情况。还有像车辆的维修信息,保险信息也都没有记录在系统中。
我们把这些新的需求进行整理,接在第一篇的需求列表之后:
8. 需记录顾客实际取车和还车的时间,用于计算实际的租车费用。
9. 需记录门店库存车辆的变化情况,跟踪每一辆车的进出库信息。
10. 记录每辆车的维修历史,包括维修的时间,费用,维修公司,维修合同号。
11. 记录每辆车的保险历史,包括保险的时间,费用,保险公司,保险合同号。
12. 注册顾客会有多个等级,对于不同等级会给予不同的折扣率(如:黄金用户有95折的优惠)。