我试图建立一个层次化的维度模型,在每个层次上都有不确定数量的特性。下面是一个关于如何在数据源中构造表的示例

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

产品->子类别和子类别->类别之间存在一对多关系。每个产品/子类别/类别也参考各自的功能表。但是,功能数不是固定的,可以是0。
我试图构建的事实表需要在其粒度的产品级别上,如果没有这些特性,我可以用它们中的每一个列创建一个维度,如下所示:
+-----------------+
|Dim_Product      |
+-----------------+
|Dim_Product_Id   |
|Product          |
|SubCategory      |
|Category         |
|...              |
+-----------------+

但是所有的功能都会丢失。
是否可以将维度保持在产品级并保留每个层次结构中的所有功能?或者有必要创建一个包含层次结构中所有功能的所有组合的桥表吗?我是否需要将级别分解为它们自己的维度(即dim_产品、dim_子类别、dim_类别)?每个继承级别也有固定的属性,所以如果单个维度是一个合适的选项,这些属性是否可以被展平并作为列包含?

最佳答案

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

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

其中TypeOfFeature是(productfeature,subcategory,category)之一。

关于sql - 建模分层数据仓库维度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23912046/

10-14 18:52