Inmon 范式建模和 Kimball 维度建模
目录
本文开始先简单理解两种建模的核心思想,然后根据一个具体的例子,分别使用这两种建模方式进行建模,大家便会一目了然! 😏。
- Inmon:《数据仓库》
- Kimball:《数仓工具箱》
范式建模
- 自上向下(数据的流向),“上"即数据的上游,“下"即数据的下游
- 分散异构的数据源—>数据仓库—>数据集市
- 以数据源头为导向
- 将数据抽取为实体-关系模型
- 并不强调事实表和维度表
维度建模
- 自下向上,数据集市—>数据仓库—>分散异构的数据源
- 以最终任务为导向
- 按照目标拆分需求,抽取为事实-维度模型,数据源经过ETL转化为事实表和维度表导入数据集市
- 以星型模型或雪花模型构建维度数据仓库
- 数据集市是数据仓库中的一个逻辑上的主题域
建模实践
以电商系统为例,有4张表,分别是:
- 用户信息表
- 城市信息表
- 用户等级表
- 用户订单表
Inmon建模
将数据抽取为实体-关系(ER)模型
- 用户实体表(ETL已过滤掉注销用户)
- 支付成功订单实体表
- 城市信息实体表
- 订单与用户关系表
- 用户与城市信息关系表
- 用户与用户等级关系表
数据没有冗余,符合三范式设计规范
Kimball建模
将数据抽取为事实表和维度表
在 Kimball 维度建模中,不需要单独维护数据关系表,因为关系已经冗余在事实表和维度表中
- 支付成功订单事实表
- 用户维度表
- 城市信息维度表
- 用户等级维度表
以上是雪花模型,特点是维度表可以拥有其他维度表
范式建模
优点:
- 没有数据冗余,保证了数据一致性
- 数据解耦,方便维护
缺点:
- 表的数量多
- 查询时多表联查降低查询性能
维度建模
优点:
- 模型简单,面向分析
- 增加数据冗余,开发周期短,能快速迭代
缺点:
- 数据大量冗余,预处理阶段开销大
- 后期维护麻烦
- 维度设计不好的话不能保证数据口径一致性
☺️ 维度就是看待问题的角度,量度就是事实表中数据类型的字段
如果把省份当作一个单独维度,城市当作一个单独维度,计算城市的人口数量。
这时省份和城市都是单独的维度,它们之间没有了关系,会出现:
广东省 杭州市 1500
浙江省 广州市 1200
在范式建模中,强调实体-关系模型,省份和城市之间一定存在归属关系,所以范式建模能保证口径的一致性,而维度建模不能!
建模方式对比
特性 | Kimball | Inmon |
---|---|---|
开发周期 | 短 | 长 |
维护难度 | 大 | 小 |
数据要求 | 针对具体业务 | 站在企业角度 |
缓慢变化维 | 是 | 否 |
数据模型 | 维度建模、星型模型、雪花模型 | 实体-关系模型,准三范式设计 |