一般電商的DB架構可以想見的是一張多對多的表去紀錄商品跟用戶當作訂單
那像是訂房網站因為同一時間的同一間房沒辦法被重複預定
像這種時候DB會如何規劃?
還是說只能從API做阻擋呢?
我會先規劃基本表如下
客戶
訂單
房間主表
房間時間表
訂單:記錄房型(房間主表ID)及使用時間。但使用時間只是單純的為了訂單顯示用。並不是主要判斷時間。
在下單時。會將「房間時間表」記錄對應房間ID startTime及endTime 。
下單會去拉房間時間表來檢查是否可以下單,及是否有重覆到時間。
印象中在建立關聯性資料庫的時候,不太建議使用多對多的方式。
詳細可以看一下資料庫正規化。
感覺上預防寫入重複預定的做法會比較好,意思是使用者沒有辦法去寫入有重複時間的訂單,這樣會比送出訂單後才比對資料庫有無重複資料來得方便一點。
那在架構的方面有很多種方式來做,看哪種比較符合你想要的方式
房間有各自的行程表:訂單會在房間的行程表上做紀錄,使用者在搜尋時只會看到剩下可以預定的日期,所以新的訂單也只能寫入空的時間。類似前面星空大大的方式。
鎖定房間使用:房間可以用個 0 或 1 表示是否可以使用,這可能比較適合網咖或是 motel 那樣有櫃台人員的,有人進去表示房間不能使用,改為 0 ,有人出來清潔好表示房間可以使用,改為 1 ,因為是當下狀況,所以建議手動更改。
限制訂單:一個房間同時只會有一筆訂單,不過這樣比較像租屋網站,但也不會有重複寫入的問題。
這邊只是講一下可能的做法,詳細的執行方式跟架構還是需要完整的需求跟詳細的規劃。