設計定價模塊我想在數據庫中的以下情形型號:如何在數據庫級
我有一個包,包括獨立Activities
和Hotel
:
包裝物P:
- 活動A1,A2,A3
- 酒店H
Activities
和Hotel
是有自己的價格在定義實體的的時間定義的獨立實體。
當一個實體是增加了到包,它的價格可以改變(只有specific to the package
)。因此,每個套餐都有獨特的活動/酒店價格。
E.g. (Defining activities and hotel)
:
A1 - 10$
A2 - 20$
H1 - 100$
(Adding activities and hotel to package)
:
Package p;
p.addActivity("A1", 15);
p.addActivity("A2", 25);
p.addHotel("H1", 50);
yields =>
p
- A1 - 15
- A2 - 25
- H1 - 50
數據庫方面:
定義:
Activity
:活動-ID,開始日期,結束日期,價格
Hotel
:酒店-ID,開始日期,結束日期,價格
加入後打包
Package table
:
包-ID,酒店-ID,活動-ID
Package-Activity price table
:包-ID,活動-ID,價格//包ID和activity-id作爲唯一密鑰
Package-Hotel price table
:包-ID,酒店-ID,價格//包-id和酒店-ID作爲唯一鍵
我需要,我已經拿出設計一些反饋。 我有過這複雜嗎?有沒有更簡單/更好的方法來做到這一點? 另外,當我寫這篇文章的時候,我覺得一個軟件包可以有很多酒店和活動,所以需要在這裏考慮一下。 我是否對此過分支持,因爲對於實體的每個價格查詢,我將執行聯接?
編輯
發現對性能有相應的線路與連接:When and why are database joins expensive?
我有點困惑。所以,我們有1個表格用於所有活動。包可以包含多個活動,所以我需要一對多的關係。我會假設Package-activities表是實現這一目標的方法。我想爲定價保留一張單獨的表格,因此我會在我的問題中列出一個套餐活動價格。正確嗎? – brainydexter
@brainydexter:不,首先,一個包可以包含多個活動,但是一個給定的活動可以在多個包中。這是一種多對多的關係。現在,當您有多個連接表時,您不必將自己限制在兩個字段中,因此價格可以與「package_id」和「activity_id」一起放在該表中。你爲什麼要爲價格保留一張單獨的表格?它必須*也*有ID以便您知道價格是指什麼。 – Borealid