建模分层数据仓库维度

时间:2014-05-28 12:47:20

标签: sql database data-warehouse dimensional-modeling

我试图建模一个层次化的维度,并且每个级别都有不确定数量的要素。以下是有关如何在数据源中构建表的示例

+-------------+              +-------------+                +-------------+     
|Product      +--------------+SubCategory  +----------------+Category     |     
+------+------+              +------+------+                +-------+-----+     
       |                            |                               |           
       |                            |                               |           
+------+----------+         +-------+-------------+         +-------+----------+
|Product Features |         |SubCategory Features |         |Category Features |
+-----------------+         +---------------------+         +------------------+

来自产品的一对多关系 - > SubCategory和SubCategory - >类别。每个Product / SubCategory / Category也引用它们各自的特征表。但是,功能的数量并不固定,可能为0。

我尝试构建的事实表需要处于其粒度的产品级别,如果没有这些功能,我可以将这些作为列的维度如下所示:

+-----------------+
|Dim_Product      |
+-----------------+
|Dim_Product_Id   |
|Product          |
|SubCategory      |
|Category         |
|...              |
+-----------------+

但是所有功能都会丢失。

是否可以将维度保持在产品级别并保留每个层次结构中的所有功能?或者是否有必要创建一个包含层次结构中所有功能的所有组合的桥接表?我是否需要将这些级别分解为自己的维度(即Dim_Product,Dim_SubCategory,Dim_Category)?每个层次级别还有固定的属性,如果单个维度是合适的选项,那么它们是否可以被展平并包含在列中?

1 个答案:

答案 0 :(得分:1)

这看起来很棘手,因为你并不确切知道功能的数量,这是我的建议,尽管桥接表会很大。

+-----------------+
|Dim_Product      |
+-----------------+
|Dim_Product_Id   |
|Product          |
|SubCategory      |
|Category         |
|...              |
+-----------------+
         |
         | 
+-----------------+
|BridgeTable      |
+-----------------+
|Dim_Product_Id   |
|Feature_Id       |
+-----------------+
         |
         |
+-----------------+
|Features         |
+-----------------+
|Feature_Id       |
|FeatureDescription
|TypeOfFeature    |
+-----------------+

TypeOfFeature是(ProductFeature,SubCategory,Category)之一。