租車資訊系統資料庫設計(2)
2010-11-14 17:26
知行思新
閱讀(5024)
評論(5)
編輯
收藏
舉報
前篇回顧
租車資訊系統資料庫設計(1)中我們根據租車系統最基本的一些需求,設計出了如下表結構:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISM9AnYldnJwAzN9c3Pn5GcuQ0MlMWbidXNplFdWhUYwkjVNRnRtNmbGdVYFh3VZBTNXp1UKhVWElzQSNkTE9kZKpHT5Z1RkBnSzYFdV1GZwhXVMpHZzI2a1cVYYlTejFjTyI2RKVkU2BjMipWOxMmb5ckYpVjMZZHMyIma1k3YulzRilWNykVdNhlWuZ0ViBXO5xkNNh0YwIFSh9CXt92YuM3YltWas5iclN3Ztl2Lc9CX6MHc0RHaiojIsJye.png)
- 有朋友看了這個結構圖後問我為什麼對于訂單沒有設計成主從表(即分為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之間為一對多關系。
新的表關系圖如下:
上圖中用紅色框标出了本次增加或改變的表和字段。
其中需要注意的是Table_StoreTransaction表中用黃色框标出的StoreTransaction_ReferenceID字段。這個字段存放某次出入庫對應的Order_ID,這樣就能知道StoreTransaction與Order的對應關系了。但對于車輛買入,或車輛報廢,送修造成的出入庫,這一字段暫時還沒有對應的資料,這将在下一篇中讨論。
下篇預告
到現在為止租車系統的基本需求已經滿足了,但還有不少問題值得思考。
1. 出入庫管理還能豐富,車輛買入,車輛報廢,送修,還有不同門店之間的車輛拆借(如門店A向門店B臨時借用某輛車),如何更好的記錄這些StoreTransaction資訊?
2. 顧客對于租車費用的支付資訊如何記錄,顧客可以通過預先充值後消費的方式來支付(這也是區分會員級别的關鍵),又該如何支援?
3. 我們在第一篇中暫時沒考慮“送車上門和上門取車”服務,要支援這一功能,我們對資料庫結構要做些什麼改動?