最近面試被問到如何設計一個停車場系統的資料庫設計問題。
面試過程中的回答都用口述,而畫出的資料表是後來的補充及修正。
面試人員一開始問說如果要設計一個依照時間收費的停車場會怎麼設計?當下覺得很奇怪,停車場和程式有什麼關係?我直覺回答會依照現今的停車場設計一個入口及一個出口並設有閘門,裡面畫有許多停車位。我心裡出現的畫面是桃園醫院旁機車停車場的模樣,因為最近常帶小孩去打疫苗。停車場進入時要先按壓入口閘門的按鈕取得綠色的感應圓幣,騎車離開停車場時要先去繳費機投入感應圓幣繳費,固定停一次20元。繳完後感應圓幣會再吐出來,然後把繳完費的感應圓幣投入出口閘門開啟閘門離開。回答時我忘了對方要求依時間收費這個需求。
接著對方又問要怎麼知道停車場是否客滿?此時我才稍微意識到對方不是要我設計實體的停車場,對方是要問如何設計一個停車場管理系統。我回答需要一張停車場資料表,該資料表有欄位紀錄車位數,車子進來一台扣1,出去就加1,數字大於0代表有車位。(此時腦中想著只有一個停車場固定停一次20元)
PARKING_LOT
+----+-------------+---------------+
| ID | TOTAL_SPACE | CURRENT_SPACE |
+----+-------------+---------------+
| 1 | 100 | 100 |
+----+-------------+---------------+
然後對方問如果有很多停車場呢,管理員希望看到當下每個停車場的可停車位數。所以資料表變成下面這樣。(此時腦中仍想著停車場外白底紅字招牌寫著停一次20元)
PARKING_LOT
+----+---------+-------------+---------------+
| ID | ADDRESS | TOTAL_SPACE | CURRENT_SPACE |
+----+---------+-------------+---------------+
| 1 | xxx | 100 | 100 |
| 2 | yyy | 80 | 80 |
| 3 | zzz | 60 | 60 |
+----+---------+-------------+---------------+
對方說每個停車場應該有不同的費率,多了PRICE
設定價格如下。
PARKING_LOT
+----+---------+-------------+---------------+-------+
| ID | ADDRESS | TOTAL_SPACE | CURRENT_SPACE | PRICE |
+----+---------+-------------+---------------+-------+
| 1 | xxx | 100 | 100 | 20 |
| 2 | yyy | 80 | 80 | 30 |
| 3 | zzz | 60 | 60 | 40 |
+----+---------+-------------+---------------+-------+
對方說停車場收費應該按停車時間收費,這就必須記錄每台車停了多久,所以要多張停車紀錄表。PARKING_CAR.PARKING_LOT_ID
為關聯PARKING_LOT.ID
的外鍵。(此時才開始把心中停車場的印象轉為Times停車場)
PARKING_CAR
+----+----------------+------------+--------------------+--------------------+
| ID | PARKING_LOT_ID | CAR_NUMBER | ENTER_TIME | EXIT_TIME |
+----+----------------+------------+--------------------+--------------------+
| 1 | 1 | AAA-0001 | 2021/5/17 15:00:00 | 2021/5/17 16:00:00 |
| 2 | 1 | AAA-0002 | 2021/5/17 15:10:00 | 2021/5/17 15:30:00 |
| 3 | 2 | BBB-0001 | 2021/5/17 14:00"00 | 2021/5/17 16:30:00 |
+----+----------------+------------+--------------------+--------------------+
對方說停車場不同時段會有不同的費率。所以要多張時段費率表,一個停車場會有多個時段的費率設定。PARKING_PRICE.PARKING_LOT_ID
為關聯PARKING_LOT.ID
的外鍵。
PARKING_PRICE
+----+----------------+------------+----------+-------+
| ID | PARKING_LOT_ID | START_TIME | END_TIME | PRICE |
+----+----------------+------------+----------+-------+
| 1 | 1 | 00:00:00 | 06:59:59 | 10 |
| 2 | 1 | 07:00:00 | 18:59:59 | 30 |
| 3 | 1 | 19:00:00 | 23:59:59 | 20 |
| 4 | 2 | 00:00:00 | 06:59:59 | 20 |
| 5 | 2 | 07:00:00 | 23:59:59 | 60 |
+----+----------------+------------+----------+-------+
到這邊問題就差不多沒繼續問了。最後的ER-Model如下。
1┌─────────────┐1
┌───┤ PARKING_LOT ├───┐
│ └─────────────┘ │
│ │
*│ │*
┌───────┴───────┐ ┌──────┴──────┐
│ PARKING_PRICE │ │ PARKING_CAR │
└───────────────┘ └─────────────┘
當下回答的蠻爛的。
沒有留言:
張貼留言