2010-09-14 54 views
1

我對數據倉庫很陌生,但我認爲我的問題可以相對容易地回答。 我構建了一個具有維度表'產品'的星型模式。該表有一個'PropertyName'列和'PropertyValue'列。 尺寸因此看起來有點像這樣:星型架構設計 - 一列尺寸

surrogate_key | natural_key (productID) | PropertyName | PropertyValue | ... 
    1    5       Size   20   ... 
    2    5       Color   red 
    3    6       Size   20 
    4    6       Material  wood 

等等。

在我的事實表中,我總是使用尺寸的代理鍵。 PropertyName和PropertyValue列的原因是我的自然鍵不再是唯一的/標識,所以我在事實表中獲得了太多的行。

我現在的問題是,我應該如何處理屬性欄?將每個屬性放在不同的維度中,比如維度大小,維度顏色等,最好嗎?我有大約30個不同的屬性。 或者我應該爲事實表中的每個屬性創建列嗎? 或使所有屬性的一個維度?

在此先感謝您的幫助。

回答

3

你的維度表「產品」應該是這樣的:

surrogate_key | natural_key (productID) | Color | Material | Size | ... 
    1    5      red  wood  20  ... 
    2    6      red  ...   

如果你有很多屬性,嘗試將它們分組,另一維度。例如,如果您可以在另一種顏色或材質中使用相同的ID和相同的價格擁有相同的產品,則顏色和材質可以是其他尺寸的屬性。事實表可以有兩個密鑰識別產品:PRODUCT_ID和colormaterial_id ...

閱讀推薦: The Data Warehouse Toolkit, Ralph Kimball

+0

好的,非常感謝。我想是的。明天將有嘗試。 – fancyPants 2010-09-14 16:32:04

1

您的設計被稱爲EAV實體 - 屬性 - 值)表。

這是一個不錯的設計爲稀疏矩陣(大量的,只有少數人填寫在同一時間屬性)。

然而,它有幾個缺點。

  • 它無法一次對兩個或多個屬性進行索引(並因此有效搜索)。像這樣的查詢:「獲得所有木製品和20或20尺寸的產品」效率會更低。

  • 涉及多個屬性的同時實施限制更爲複雜

如果這不是你的問題,你可以使用EAV設計。