天天看點

租車資訊系統資料庫設計(2) - 知行思新

租車資訊系統資料庫設計(2)

2010-11-14 17:26 

知行思新 

閱讀(5024) 

評論(5) 

編輯 

收藏 

舉報

前篇回顧

租車資訊系統資料庫設計(1)中我們根據租車系統最基本的一些需求,設計出了如下表結構:

租車資訊系統資料庫設計(2) - 知行思新
  • 有朋友看了這個結構圖後問我為什麼對于訂單沒有設計成主從表(即分為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折的優惠)。

對于需求8,我們要在原先的Table_Order中加入新的列,加入Order_ActualStartDate,Order_ActualEndDate來記錄實際取車和還車時間,還要加入Order_ActualPrice來記錄實際産生的租車費用。

對于需求9,我們可以加入一張Table_StoreTransaction表來記錄車輛的進出庫流水。表中的字段需包括:發生進出庫的車輛ID(Car_ID),表示是進庫還是出庫的标簽(StoreTransaction_InOutFlag),進出庫的時間(StoreTransaction_Date)。Table_Car與Table_StoreTransaction為一對多關系。

對于需求10,我們要加入一張Table_RepairHistory表,Table_Car與Table_RepairHistory為一對多關系。間接的還會引入一張Table_RepairStation表,來記錄維修點資訊。Table_RepairStation與Table_RepairHistory之間也為一對多關系。

對于需求11,加入一張Table_InsuranceHistory表,Table_Car與Table_InsuranceHistory為一對多關系。間接引入Table_InsuranceCompany表,記錄保險公司資訊。Table_InsuranceCompany與Table_InsuranceHistory之間為一對多關系。

對于需求12,加入Table_Class表,表中會存放折扣資訊(Class_Discount)。Table_Class與Table_Customer之間為一對多關系。

新的表關系圖如下:

租車資訊系統資料庫設計(2) - 知行思新

上圖中用紅色框标出了本次增加或改變的表和字段。

其中需要注意的是Table_StoreTransaction表中用黃色框标出的StoreTransaction_ReferenceID字段。這個字段存放某次出入庫對應的Order_ID,這樣就能知道StoreTransaction與Order的對應關系了。但對于車輛買入,或車輛報廢,送修造成的出入庫,這一字段暫時還沒有對應的資料,這将在下一篇中讨論。

下篇預告

到現在為止租車系統的基本需求已經滿足了,但還有不少問題值得思考。

1. 出入庫管理還能豐富,車輛買入,車輛報廢,送修,還有不同門店之間的車輛拆借(如門店A向門店B臨時借用某輛車),如何更好的記錄這些StoreTransaction資訊?

2. 顧客對于租車費用的支付資訊如何記錄,顧客可以通過預先充值後消費的方式來支付(這也是區分會員級别的關鍵),又該如何支援?

3. 我們在第一篇中暫時沒考慮“送車上門和上門取車”服務,要支援這一功能,我們對資料庫結構要做些什麼改動?

租車資訊系統資料庫設計(2) - 知行思新