目录

Inmon 范式建模和 Kimball 维度建模

本文开始先简单理解两种建模的核心思想,然后根据一个具体的例子,分别使用这两种建模方式进行建模,大家便会一目了然! 😏。

  • Inmon:《数据仓库》
  • Kimball:《数仓工具箱》

范式建模

  1. 自上向下(数据的流向),“上"即数据的上游,“下"即数据的下游
  2. 分散异构的数据源—>数据仓库—>数据集市
  3. 数据源头为导向
  4. 将数据抽取为实体-关系模型
  5. 并不强调事实表和维度表

维度建模

  1. 自下向上,数据集市—>数据仓库—>分散异构的数据源
  2. 最终任务为导向
  3. 按照目标拆分需求,抽取为事实-维度模型,数据源经过ETL转化为事实表和维度表导入数据集市
  4. 星型模型或雪花模型构建维度数据仓库
  5. 数据集市是数据仓库中的一个逻辑上的主题域

建模实践

以电商系统为例,有4张表,分别是:

  1. 用户信息表
  2. 城市信息表
  3. 用户等级表
  4. 用户订单表

Inmon建模

将数据抽取为实体-关系(ER)模型

  1. 用户实体表(ETL已过滤掉注销用户)
  2. 支付成功订单实体表
  3. 城市信息实体表
  4. 订单与用户关系表
  5. 用户与城市信息关系表
  6. 用户与用户等级关系表

数据没有冗余,符合三范式设计规范

Kimball建模

将数据抽取为事实表和维度表

在 Kimball 维度建模中,不需要单独维护数据关系表,因为关系已经冗余在事实表和维度表中

  1. 支付成功订单事实表
  2. 用户维度表
  3. 城市信息维度表
  4. 用户等级维度表

以上是雪花模型,特点是维度表可以拥有其他维度表

范式建模

优点:

  1. 没有数据冗余,保证了数据一致性
  2. 数据解耦,方便维护

缺点:

  1. 表的数量多
  2. 查询时多表联查降低查询性能

维度建模

优点:

  1. 模型简单,面向分析
  2. 增加数据冗余,开发周期短,能快速迭代

缺点:

  1. 数据大量冗余,预处理阶段开销大
  2. 后期维护麻烦
  3. 维度设计不好的话不能保证数据口径一致性

☺️ 维度就是看待问题的角度,量度就是事实表中数据类型的字段


如果把省份当作一个单独维度,城市当作一个单独维度,计算城市的人口数量。

这时省份和城市都是单独的维度,它们之间没有了关系,会出现:

广东省 杭州市 1500
浙江省 广州市 1200

在范式建模中,强调实体-关系模型,省份和城市之间一定存在归属关系,所以范式建模能保证口径的一致性,而维度建模不能!

建模方式对比

特性 Kimball Inmon
开发周期
维护难度
数据要求 针对具体业务 站在企业角度
缓慢变化维
数据模型 维度建模、星型模型、雪花模型 实体-关系模型,准三范式设计