0

設計定價模塊我想在數據庫中的以下情形型號:如何在數據庫級

我有一個包,包括獨立ActivitiesHotel

包裝物P:

  • 活動A1,A2,A3
  • 酒店H

ActivitiesHotel是有自己的價格在定義實體的的時間定義的獨立實體。

當一個實體是增加了到包,它的價格可以改變(只有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?

回答

2

實際上您在這裏需要五個表。

您有三個實體:活動,酒店和套餐(假設每個套餐都有一些與酒店或活動無關的數據)。你有兩種關係,都是多對多的,即包 - 酒店和包活動。每個關係行都用特定的價格進行註釋。

五張桌子是要走的路。不,必須進行連接並不是一個問題:它比具有非正常數據要好。如果需要,您可以在以後反規範化。

+0

我有點困惑。所以,我們有1個表格用於所有活動。包可以包含多個活動,所以我需要一對多的關係。我會假設Package-activities表是實現這一目標的方法。我想爲定價保留一張單獨的表格,因此我會在我的問題中列出一個套餐活動價格。正確嗎? – brainydexter

+1

@brainydexter:不,首先,一個包可以包含多個活動,但是一個給定的活動可以在多個包中。這是一種多對多的關係。現在,當您有多個連接表時,您不必將自己限制在兩個字段中,因此價格可以與「package_id」和「activity_id」一起放在該表中。你爲什麼要爲價格保留一張單獨的表格?它必須*也*有ID以便您知道價格是指什麼。 – Borealid