zoukankan      html  css  js  c++  java
  • 租车信息系统数据库设计(3)

    前篇回顾

    租车信息系统数据库设计(1)租车信息系统数据库设计(2)中我们列出了租车信息系统的12条需求,并相应做了数据库设计,最后得到的表关系图如下:

    CarRentalDiagram3_1

    租车信息系统数据库设计(2)的最后提出了3个新问题:

    1. 出入库管理还能丰富,车辆买入,车辆报废,送修,还有不同门店之间的车辆拆借(如门店A向门店B临时借用某辆车),如何更好的记录这些StoreTransaction信息?

    2. 顾客对于租车费用的支付信息如何记录,顾客可以通过预先充值后消费的方式来支付(这也是区分会员级别的关键),又该如何支持?

    3. 我们在第一篇中暂时没考虑“送车上门和上门取车”服务,要支持这一功能,我们对数据库结构要做些什么改动?

    就这3个问题,今天我给出自己的解决方案与大家进行讨论。

    更细致的出入库管理

    对于问题1,可以通过细分StoreTransaction来解决。

    • 在Table_StoreTransaction表中增加StoreTransaction_Type列来存放进出库类型,我把进出库类型分为3种(Purchase,Adjustment,Rental)。相应还需要加入两张表Table_Purchase(记录买入车辆的信息),Table_Adjustment(记录车辆拆借、送修、报废信息)。
    • Table_StoreTransaction表中的StoreTransaction_ReferenceID列根据不同的进出库类型指向不同表中的记录。

    下表罗列了各种情况的进出库类型和Reference ID指向的表:

      进出库类型 Reference ID指向的表记录
    车辆出租 Rental(In/Out) Table_Order
    车辆买入 Purchase(In) Table_Purchase
    车辆拆借 Adjustment(In/Out) Table_Adjustment
    车辆送修 Adjustment(In/Out) Table_Adjustment
    车辆报废 Adjustment(Out) Table_Adjustment

    我们来看一下需要新建的表的字段。实际上,除了要新建Table_Purchase,Table_Adjustment之外,还会间接引入Table_AdjustmentType表。

    • Table_Purchase:

    列名 解释
    Purchase_ID Identity字段
    Store_ID 入库门店ID
    Car_VIN 车辆唯一编号
    CarCategory_ID 车辆型号ID
    Purchase_Date 购买日期
    Purchase_Price 购买价格
    Purchase_Currency 货币
    Purchase_CreatedBy 购车申请人
    Purchase_AuthorisedBy 购车批准人
    Purchase_Comment 购车备注

    注意:

    1. Table_Purchase表中没有Car_ID字段是因为在车辆买入之前,Table_Car中还没有对应记录。

    2. 为了简化,我们的设计中Table_Purchase只记录成功购买车辆的信息。如果想对车辆购买进行像Order一样的流程控制,就需要增加些新的字段和表,如购车状态信息(记录Purchase的状态,如新建,审批通过,取消或完成等),大家自己根据需要添加。

    • Table_Adjustment:

    列名 解释
    Adjustment_ID Identity字段
    AdjustmentType_ID 调库类型ID,指向Table_AdjustmentType记录
    Store_ID 入库/出库门店ID
    Car_ID 车辆ID
    Adjustment_Date 调库日期
    Adjustment_ExpectDate 预期归还时间
    Adjustment_CreatedBy 调库申请人
    Adjustment_AuthorisedBy 调库批准人
    Adjustment_Comment 调库备注

    注意:

    1. Adjustment_ExpectDate表示预期归还时间,此字段只有在Adjustment Type对应为Borrow In, Lend Out, Send to Repair中有意义。当为其他Adjustment Type时,此字段置为NULL。

    2. 在此设计中,当某车辆从一个门店Adjust Out后,Table_Car中对应的车辆记录的车辆状态变为Inactive。当某车辆被Adjust In到一个门店后,Table_Car中会相应插入一条车辆记录(也有可能只需做Update),且该车辆状态为Ready。

    3. 对于公司各门店之间的拆借,上述方式之外,大家也可以考虑把个门店也看作内部客户,一个门店可以向另一个门店创建Order,走Order流程。但借入车辆的门店需要有一种机制来把车辆收入门店,大家可以思考,并比较两种方式的优劣。

    • Table_AdjustmentType:

    列名 解释
    AdjustmentType_ID Identity字段
    AdjustmentType_Name 调库类型,包括:借入Borrow In,借出Lend Out,归还Return In,返还Return Out,送修Send to Repair,修完入库Return after Repair,报废Scrap
    AdjustmentType_InOutFlag 进出库标签

    注意:

    本设计中Adjustment Type分得较细,通过Adjustment Type就能区分是入库还是出库。

    另一种设计是用较少的Adjustment Type来区分调库的种类(如只有Borrow,Return,Repair,Scrap四种),通过InOutFlag来区分进/出库。若要这么做就需要把InOutFlag字段放到Table_Adjustment中。至于两种方式的有缺点,大家可以思考。

    新的表关系图

    由于加入新的表之后,表关系链接出现了交错。所以我使用了数据库的‘自动整理表’功能把关系图重新排列了一下,得到下图:

    CarRentalDiagram3_2

    • 其中用红色框圈出的表是这次新加入的表。
    • 其中用黄色圈出的几个字段是我们需要注意的:

    1. 在先前的Table_Car中(本文开始的关系图),有字段Car_PurchasePrice, Car_Currency。我们引入了Table_Purchase表之后,这两个字段的信息有冗余,可以省去。我把其中的Car_PurchasePrice改为了Car_CurrentPrice,用于记录每年折损后的车辆价值。

    2. 在租车信息系统数据库设计(2)中,Table_StoreTransaction表中的StoreTransaction_ReferenceID字段对于车辆买入,车辆拆借、车辆报废和送修造成的出入库没有对应的信息。现在对于上述情况,此字段将引用Table_Purchase或Table_Adjustment的ID列。

    下篇预告

    没想到第一个问题就写了这么多,剩下的问题来不及写了,只能留到下一篇中讨论。

    2. 顾客对于租车费用的支付信息如何记录,顾客可以通过预先充值后消费的方式来支付(这也是区分会员级别的关键),该如何支持?

    3. 我们在第一篇中暂时没考虑“送车上门和上门取车”服务,要支持这一功能,我们对数据库结构要做些什么改动?

  • 相关阅读:
    微信小程序用setData修改数组或对象中的一个属性值,超好用,最简单的实现方法,不容错过!大神们 都 在 看 的方法!!!
    pythonchallenge1
    pythonchallenge4
    pythonchallenge7
    pythonchallenge9
    pythonchallenge8
    pythonchallenge2
    pythonchallenge0
    递归排序
    pythonchallenge3
  • 原文地址:https://www.cnblogs.com/DBFocus/p/1888209.html
Copyright © 2011-2022 走看看