Kimball风格数仓:1:1关系的交易属性应存事实表还是建维度表?
Kimball风格数据仓库中1:1关联交易属性的建模方案
按照Kimball的维度建模实践,这些与事实表粒度完全一致的交易描述属性,直接放在事实表中是更合理的选择,原因和相关补充如下:
1:1维度表的冗余与维护成本
单独创建transaction_dim维度表会引入不必要的冗余存储,且每次事实表写入时都要同步维护维度表的1:1关联,增加ETL的复杂度和出错概率,不符合Kimball建模追求的简洁高效原则。维度表的核心作用是复用与聚合
Kimball维度表的设计初衷是为了跨事实表复用维度属性,以及支持基于维度的分组聚合分析。如果这个维度表没有其他事实表关联,也不存在跨事实聚合的需求,那么它就失去了作为独立维度表的价值。特殊情况的例外处理
只有当这些交易属性存在缓慢变化(SCD)需求时,才需要考虑单独做维度表。比如交易状态会随时间变更(从"待支付"变为"已完成"),且需要保留交易在不同时间点的状态快照,这时独立维度表可用SCD类型2记录状态变化。若属性是交易创建时就确定且不会变更的,拆分毫无必要。事实表的适度冗余是可接受的
Kimball建模并不完全排斥事实表中的描述性属性,尤其是当属性和事实粒度强绑定、无复用价值时,直接存储在事实表中反而能提升查询效率——避免不必要的表关联,减少查询IO开销。
内容的提问来源于stack exchange,提问作者RobMartin
相关产品推荐
相关产品推荐

