写在前面

本文隶属于专栏《100个问题搞定大数据理论体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和文献引用请见100个问题搞定大数据理论体系

解答

数据仓库建模目前业界较为流行的数据仓库的建模方法非常多,常用的有范式建模法,维度建模法,实体建模法等几种方法。
每种方法其实从本质上讲就是从不同的角度看我们业务中的问题,不管从技术层面还是业务层面,其实代表的是哲学上的一种世界观。
其中维度建模法最常用,基于事实表和维表可以构建出多种多维模型,包括星形模型、雪花模型和星座模型。

补充

范式建模法(Third Normal Form 3NF)

范式建模法是基于整个关系型数据库的理论基础之上发展而来的,其实是我们在构建数据模型常用的一个方法,主要解決关系型数据库得数据存储,利用的一种技术层面上的方法。

目前,我们在关系型数据库中的建模方法,大部分采用的是三范式建模法。

从其表达的含义来看,一个符合第三范式的关系必须具有以下三个条件

  1. 每个属性值唯一,不具有多义性;
  2. 每个非主属性必须完全依赖于整个主键,而非主键的一部分;
  3. 每个非主属性不能依赖于其他关系中的属性,因为这样的话,这种属性应该归到其他关系中去。

维度建模法

维度建模(dimensional modeling)是专门用于分析型数据库、数据仓库、数据集市建模的方法。

维度建模法简单描述就是按照事实表、维度表来构建数仓、集市。

维度建模从分析決策的需求出发构建模型,为分析需求服务,因此它重点关注用户如何更快速地完成需求分析,同时具有较好的大规模复杂查询的相应性能。

关于事实表和维度表详情请见我的另一篇博客——什么是事实表和维度表?

星形模型

星形模式(Star Schema)是最常用的维度建模方式。 星型模式是以事实表为中心,所有的维度表直接连接在事实表上,像星星一样。 星形模式的维度建模由一个事实表和一组维表组成,且具有以下特点

  1. 维表只和事实表关联,维表之间没有关联;
  2. 每个维表主键为单列,且该主键放置在事实表中,作为两边连接的外键;
  3. 以事实表为核心,维表围绕核心呈星形分布。

星形模型

雪花模型

雪花模式是对星形模式的扩屐。

雪花模式的维度表可以拥有其他维度表的,虽然这种模型相比星型更规范些,但是由于这种模型不太容易理解,维护成本比较高,而且性能方面需要关联多层维表,性能也比星型模型要低。

所以一般不是很常用。

雪花模型

星座模型

星座模式是星型模式延伸而来,星型模式是基于一张事实表的,而星座模式是基于多张事实表的,而且共享维度信息。

前面介绍的两种维度建模方法都是多维表对应单事实表,但在很多时候维度空间内的事实表不止一个,而一个维表也可能被多个事实表用到。

在业务发展后期,绝大部分维度建模都采用的是星座模式。

星座模型

实体建模法

实体建模法并不是数据仓库建模中常见的一个方法,它来源于哲学的一个流派。

从哲学的意义上说,客观世界应该是可以细分的,客观世界应该可以分成由一个个实体,以及实体与实体之间的关系组成。

那么我们在数据仓库的建模过程中完全可以引入这个抽象的方法,将整个业务也可以划分成一个个的实体, 而每个实体之间的关系,以及针对这些关系的说明就是我们数据建模需要做的工作。

Q.E.D.


大数据开发工程师,精通 Spark,擅长 Java 和 Scala