角色维
如果将维度想象成一把直尺,直尺上不同的刻度代表一个维度表上的不同的列。那么在几何课上将直尺用来测量距离,在阅读时用直尺用作书签,夹在书中,这个时候直尺在不同的场景下有着不同的作用,这就是角色维的概念。即相同的维度表在不同的模型中起着不同的作用,一般可以用视图实现。
微小维
如果直尺很长,但是每次测量都只用到前面的部分,那么就将直尺进行一定程度的裁剪,将用的最多的部分独立出来,方便使用,这就是微小维的概念,即将维度的子集单独出来进行使用。与微小维所类似的的是微型维的概念。微型维并不是以子集拆分而是以变化程度进行拆分的,即将维度中变化比较频繁的维度单独拆分出来进行管理。因为维度表往往都是宽表,单独出来的微型维度可以防止维度表的频繁更新导致锁,进而影响使用。微小维与微型维示意图如图1所示。
图片
▲图1 微小维与微型维示意图
支架维度
支架维度与桥接维度都可以看成维度的一种补充形式,前者是对于维度属性的额外补充;后者是对于维度表的一种桥接关系,关联另外的维度表。支架维度字如其名,是对于维度中属性信息的一种补充,其主要是维度表中对于另外维度的引用关系。例如商品中有出厂日期属性,但是日期属性是属于日期维度的信息,如图2所示。
▲图2 支架维度示意图
支架维度本质上是不同维度表的关联,但是在维度建模中维度表之间的关联是应该通过事实表进行的。
桥接维度
对于桥接维度可能就更加好理解了,就是两个维度表之间通过第三张维度表进行关联,其中存储另外两个维度表的关系。如图9-6所示,维度表A与维度表B之间某个字段的属性存在多对多关系,基于这种多对多关系设计维度表C,用来存储这两个属性的关系。例如代理商与客户之间,一个代理商可以代理多个客户,同时一个客户也可以隶属于多个代理商,那么维度表C则就是代理商与客户的映射关系。当然依然还是按照维度建模的理论,维度之间的关系应该通过事实表去体现,如果你清楚这样做带来的好处以及坏处,那么依然可以采用这种方式去构建你的维度。桥接维如图9-5所示。
图片
▲图3 桥接维示意图
这样通过支架维度、桥接维度我们可以解决维度中出现多值、多属性的问题。然而对于某些零散的维度,每个维度属性值都比较少,例如不同渠道的付款的方式:渠道粗略的看只有线上以及线下;付款方式的只有现金、信用卡、网络支付。将这2个属性进行笛卡尔组合之后,过滤掉不合理的场景,就完成了简单的杂项维的构建,如表1所示。
表1 杂项维度
代理键 | 渠道 | 付款方式 |
1 | 线上 | 网络支付 |
2 | 线下 | 现金 |
3 | 线下 | 信用卡 |
此外对于很多维度是有层级结构的,例如省份、城市或者母公司、子公司等。这种层次结构的维度对于应用使用并不友好,故往往采用扁平化的方式进行处理方便应用使用。但是这种处理需要根据具体的应用特点,例如对于省份城市可能直接进行平铺展示,而对于某些场景会处理上一级公司或者下一级公司进行展示,如表2所示。
表2 平铺处理层次维度
代理键 | 国家 | 省份 | 城市 | 区 |
1 | 中国 | 江苏 | 苏州 | 开发区 |
2 | 中国 | 上海 | 上海 | 闵行区 |
当然也有利用上下级别引用来进行展示的维度信息,如表3所示。
表3 利用上下级别引用处理的层次维度
代理键 | 代理商 | 下一级代理商 | 上一级代理商 |
1 | A | C | B |
2 | B | E | D |
说到这里一些常见的维度处理方式基本上就告一段落了,但是在维度的世界中,维度并不是一成不变的,恰恰相反,很多维度会随着时间变化而进行缓慢的变化,例如用户年龄每一年都要变化。同时一些业务的变化必然也会导致维度发生变化,例如公司部门或者产品属性的调整都会导致此类的场景,因为这就引出来维度中非常重要的概念,缓慢变化维度。
那么关于缓慢变化维度在《企业级数据架构》一书中寻找吧。
关于作者:
李杨,资深数据架构师,在数据相关领域有10年以上工作经验。头部保险资管公司科技平台交易系统团队开发组负责人,负责多个应用以及数据平台的建设、优化以及迁移工作。曾担任某数据公司技术合伙人,负责多个金融机构的数据仓库或数据平台相关的工作。《企业级数据架构:核心要素、架构模型、数据管理与平台搭建》作者。
本文摘编于《企业级数据架构:核心要素、架构模型、数据管理与平台搭建》(书号:9787111746829),经出版方授权发布,转载请标明文章出处。