2011-11-17 149 views
0

我有一個數據庫存儲組件表中的組件。 還有第二個組件價格表。該表有一個映射到組件ID的字段。我的價格表需要存儲一堆不同價格的信息(10,100,1000,10K,100K,1M)。事情是,未來有可能存儲其他價格類型,如25K或50K。價格數據的數據庫設計

至於現在,我的價格表如下:

id component_id type price 

其中類型可以從1-6目前採取的值。這很好,因爲它可以讓我在未來非常輕鬆地添加新的價格類型。

另一種選擇是價格表如下:

id component_id price_10 price_100 price_1000 price_10K price_100K price_1M 

但在這種情況下,我需要在每次添加新的價格類型時添加一個新的領域。

我希望這裏的人會同意第一種方法。

但是使用第一種方法時,我無法顯示一個頁面,該頁面可能會顯示我的數據庫中的所有組件,可能有或沒有6的價格(在這種情況下應顯示0)。顯然,使用第二種方法很簡單。

這是查詢我到目前爲止:

SELECT * FROM `component` LEFT JOIN `component_cost` ON `cmpcst_component` = `cmp_id` 

編輯: 我想我會表現出從組件價格表中的一些樣本數據: 價格是單價,金額X,X範圍從10到100萬。所以我可能有這樣的事情在我的組件價格表:

id component_id type price 
1  1    1  0.50 
2  1    2  0.45 
3  1    3  0.40 
4  1    4  0.35 
5  1    5  0.32 
6  1    6  0.30 
+0

類型和價格之間的關係是什麼?一種類型可以有兩種不同的價格嗎?換句話說,這些數字是什麼:10,100,1000,10K,100K,1M,25K,50K。他們是美元還是別的東西? – Kash

+0

我剛剛添加了示例數據到我的文章底部。 價格是一個單價。因此,一個組件在訂購10個單位時可能花費0.50美元,或者訂購1000個單位時花費0.40美元。 – Justin

+0

如果你給我們每個表的結構和樣本數據,以及預期的輸出,它會有所幫助。根據您提供的內容,我們可能會提供一個更好的解決方案,而不僅僅是回答您的sql問題,就像您最好還是利用查找表一樣,後者會證明給您更輕鬆的維護,或者如果你將需要一張已經非規範化的表格:) – Nonym

回答

1

創建兩個表,一個用於組件和一個用於compontent價格(最少次數)。然後,您可以爲每個組件添加儘可能多的價格。現在和未來。

這是您的第一個示例的變體,您只是不硬編碼類型,但具有與某個特定價格相關的編號。

+0

編輯: 我在第一篇文章中添加了示例數據。 – Justin

0

嘗試類似:

select * from component c join compcst_component cc on true and c.id = cc.cmp_id; 
0

我不知道我跟着你..希望你可以給我們的表結構,但這裏的一個嘗試:

SELECT c.cmp_id, ISNULL(p.price, 0) AS Price 
FROM component AS c INNER JOI component_cost AS p 
ON p.cmpcst_component = c.cmp_id 

也許我不沒有列到表匹配的權利,但嘗試。