前言

数仓有好几种建模技术,有ER建模,关系建模,还有专门针对数仓的维度建模。
本文主要介绍维度建模,并说说三种建模方式。

维度建模概念

维度建模是专门用于分析型数据库,数据仓库,数据集市建模方法。
它本身是一种关系建模方法,但是和操作性数据库中介绍的关系建模方法相比新加了两个概念:
(1) 维度表 dimension
表示对分析主题所属类型的描述。

比如"昨天早上张三在京东花费200元购买了一个皮包"。那么以购买为主题进行分析,可从这段信息中提取三个维度:时间维度(昨天早上),地点维度(京东), 商品维度(皮包)。

维度信息比较固定,且数据量小。

(2)事实表 fact table
表示分析主题的度量。比如上面的例子,200元就是事实信息。事实表包含了与各个维度相关联的外键,并通过join方式与维度表管联。
事实表的度量通常是数值类型,数据量会不断增加,规模不断变大。

维度建模的三种模式

(1)星型模式

如何建立数据仓库多维分析模型 数据仓库维度建模举例_数据仓库


星型模式是最常见的建模方式。

可以看出星型模式下,有一个事实表和多个维表组成。 还有以下特点:

a. 维表和事实表关联,维表之间没有关联;
b. 每个维表的主键为单列,且该主键放在事实表中,作为两边连接的外键;
c. 以事实表为中心,维表围绕事实表呈星型分布;

(2)雪花模式

如何建立数据仓库多维分析模型 数据仓库维度建模举例_如何建立数据仓库多维分析模型_02


雪花型是对星型模式的扩展。,每个维表都能继续向外再连接多个子维表。如上图。

星型模式下的维表相对雪花模式下要大,而且不满足规范化设计。雪花模式是将维表拆开成小表, 满足了规范化设计。但是在实际工作中,雪花模型会导致开发难度变大。(3)星座模式

如何建立数据仓库多维分析模型 数据仓库维度建模举例_字段_03


星座模式也是星型模式的扩展。

前面的二种的建模都是多个维表对应单个事实表,但是很多时候维度空间内的事实表不止一个,而一个维表也是呗多个事实表用到。

在业务发展后期,大部分维度建模也都是采用星座模式模式。(4) 三种模式对比

归纳下,星型,雪花,星座模式关系图如下:

如何建立数据仓库多维分析模型 数据仓库维度建模举例_字段_04


雪花模式是将星型模式的维表进一步划分,使各维表均满足规范化设计。而星座模式则是允许星形模式中出现多个事实表。

更多可能的事实属性

在事实表中,除了对应到维表的外键,和度量属性(字段)之外,还会常常考虑另外两个属性(字段):事务标识码,和事物时间。说白了就是一个该条数据的特有id,和时间列。

事务标识码通常命名为*_ID之类的形式,意义是各种订单号,编号…设置这个字段在事实表中,而不是在维表中,是原因是这个字段量级太大,如果是在维表中,每次查询都会耗费很多资源来join。这样做是不合适的。

将事务时间列(时间列)放在事实表中,也是处于相同的考虑。因为事实表量级很大,所以在分布式仓库中,需要创建分区表。