所以,我想我明白在维度中放入什么,在事实表中放入什么,以及如何实现这一点。现在我遇到了问题,我有这个维度“产品”和一个维度“产品属性”。我不得不拆分它,否则我在“产品”中的自然键将不再是唯一的。我在 这个问题中问过这个。
所以我的“productProperties”维度表应该是这样的:颜色 | 材料 | 尺寸
1.)为了实现这一点,我必须创建“颜色”、“材料”、“尺寸”等值的所有可能排列,对吧?
这将远远超过 2 亿行,所以我决定将其拆分。我现在有一个维度“颜色”,它实际上由“颜色”、“颜色前”、“颜色后”列组成。
2.)我猜这很好,但是维度“大小”呢,它只包含“surrogate_key”和“value”列?
我已经阅读了“退化维度”(在我的另一个问题中给出的阅读建议中),这意味着在事实表中将“单列维度”设为一列。这对我来说似乎有点不切实际,因为我最终会在我的事实表中增加大约 5-6 列。
如果我应该这样做怎么办?
3.) 这些退化维度是事实表中主键的一部分吗?
最重要的问题:我的事实表中将包含产品条目,这些条目与我的维度中的每一列不匹配,或者根本不匹配所有维度。意思是,我可能有一个条目/产品,它具有“color”属性,但没有“colorFront”或“colorBack”属性。由于我创建了“color”、“colorFront”和“colorBack”的每一个排列,当尝试填充我的事实表时,我将获得多个代理键,如果产品只有属性“color”会导致我的重复事实表,对吧?
4.) 那么在查询我的事实表时,我是否必须过滤掉那些重复项?或者这是完全错误的?
我当然可以在三个维度上拆分维度“颜色”。但随后我将在某些列中获得具有 NULL 值的条目。完全不使用某些尺寸的条目/产品也是如此。
5.) 如何处理那些 NULL 值?
提前感谢您的帮助。