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