設計:相似的表和外鍵
描述
我正在建立一個用於儲存社交事件的數據庫。它們可以是一次性的和經常性的。價格和容量可能因日期而異。這些事件的變體也可以改變基本價格。並非所有變體在每個日期都可用,因此日期是每個變體的。
表
我正在考慮具有以下結構(為簡單起見省略了欄位):
event event_variant event_date event_recurrence event_config ----- ------------- ---------- ---------------- ------------ id id variant_id variant_id id name event_id config_id config_id event_id plus_price date rrule price capacity
然後將在物化視圖中生成重複事件。如果
date
和recurrence
重疊,date
將是首選。事件
事件表包含對搜尋很重要的基本資訊,例如位置、描述、事件類別。
事件變體
事件的特定變體。每個事件都有 1-n 個事件變體。事件變體有其標題和描述,以及額外的價格資訊。
活動日期和重複
重複日期是事先已知發生的日期。日期用於不規則事件。每個不規則和重複的日期都分配了一個變體。某些變體可能在某些日期不可用。每個日期還分配了一個配置,其中包含特定日期/重複的價格和容量。
事件配置
保存有關最大容量(根據購買計算的目前上限)和目前事件價格的資訊。
例子
事件名為逃生室。有描述、圖像等。
變體
- 基本 - 無需額外費用,持續 1 小時
- 延長 - 解鎖更多子房間,持續 2 小時。額外費用 5 美元
日期
每週二和周五 18:00(存入
event_recurrence
),部分節假日有特殊日期(存入event_date
)。價格
- 20 $ during summer holidays, 15 $ 一年中的其餘時間(重複日期)。某些日期可能需要額外付費(聖誕節、復活節……)。
問題
基本上,這以兩種不同的方式使我的吉米沙沙作響:
- 是否
event_config
需要參考event
viaevent_id
?知道配置屬於哪個事件是有意義的,但同時感覺多餘,因為它隱含在與日期的關係中。- 不是
event_config
不必要的複雜性嗎?event_date
其唯一目的是為和提供共享欄位event_recurrence
。price
將andcapacity
列同時包含在date
and中不是更好recurrence
嗎?
你的問題,我的回答:
- event_config 是否需要通過 event_id 引用事件?知道配置屬於哪個事件是有意義的,但同時感覺多餘,因為它隱含在與日期的關係中。
將 event_id 添加到 event_config 表允許您輕鬆設計用於修改 event_config 表的使用者界面,而不需要對實際事件實例的複雜引用。這可能對“預設”配置有用。
這也允許在使用者選擇日期之前向使用者呈現數據的更簡單的程式碼路徑。
- event_config 不是不必要的複雜性嗎?它的唯一目的是為 event_date 和 event_recurrence 提供共享欄位。將價格和容量列同時包含在日期和重複週期中不是更好嗎?
event_config
對我來說似乎是一個很好的優化。我將其視為一種獨立於特定事件及時管理配置的方式。例如,您可能有一個“假期”配置、每個工作日的配置以及“週六”和“週日”的配置,對於那些日子發生的每個事件,每個配置都可能完全相同。為什麼要通過將資訊儲存在event_date
and中來複製該數據event_recurrence
?