【问题标题】:star schema design - one column dimensions星型模式设计 - 一列维度
【发布时间】:2011-04-12 05:32:16
【问题描述】:

我是数据仓库的新手,但我认为我的问题相对容易回答。 我建立了一个星型模式,带有一个维度表“产品”。此表具有“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 种不同的属性。 或者我应该为事实表中的每个属性创建列吗? 还是创建一个具有所有属性的维度?

提前感谢您的帮助。

【问题讨论】:

    标签: sql data-warehouse star-schema


    【解决方案1】:

    您的维度表“产品”应如下所示:

    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

    【讨论】:

    • 好的,非常感谢。我想就是这样。明天试试看。
    【解决方案2】:

    您的设计名为EAV (entity-attribute-value) 表。

    这是一个很好的稀疏矩阵设计(大量的属性,同时只有少数几个)。

    但是,它有几个缺点。

    • 它不能同时在两个或多个属性上被索引(因此有效地搜索)。像这样的查询:“获取所有尺寸为或 20 的木材制成的产品”的效率会降低。

    • 同时实现涉及多个属性的约束更加复杂

    如果对你没问题,你可以使用EAV设计。

    【讨论】:

      猜你喜欢
      • 2022-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-28
      相关资源
      最近更新 更多