维度建模是一种将数据结构化的逻辑设计方法,也是一种广泛应用的数仓建模方式,它将客观世界划分为度量和上下文。度量是常常是以数值形式出现,事实周围有上下文包围着,这种上下文被直观地分成独立的逻辑块,称之为维度。它与实体-关系建模有很大的区别,实体-关系建模是面向应用,遵循第三范式,以消除数据冗余为目标的设计技术。维度建模是面向分析,为了提高查询性能可以增加数据冗余,反规范化的设计技术。
上面的解释看起来是比较抽象,一下子可能不是很容易懂。我们先来了解一下事实和维度,基于上面再来分析一下。
事实,表示的是某一个业务度量。比如说订单的金额,订单中出售商品的数量。维度模型中的事实表存放的就是这些业务度量,也就是业务过程中事件的性能度量结果。《数据仓库工具箱》中有这样一段描述:
物理世界的每一个度量事件与对应的事实表行具有一对一的关系,这思想是维度建模的基本原则,其他的工作都是以此为基础建立的。
事实就是一个具体发生的业务过程的状态,以及用来描述该具体的业务过程的指标构成的一行记录,多行记录就构成一张事实表。比如一个订单就是一个事实,而多个事实聚集而成的一张二维表就是事实表。
维度,维度是事实不可或缺的组成部分,维度就是事实的上下文,也就是用来描述事实发生时某个方面对应的状态。像是何时、何地、何人、发生了什么、怎么做、为什么这么做等。举个具体的例子,比如在18点,小明下了一个苹果的订单,那么在这里下了订单是事实,18点是时间维度,小明是用户维度,苹果是商品维度,通过这些谓词,我们就可以了解具体发生了什么,这个也是我们多为分析的一个基本朴素的思想。这些一个一个具体的维度聚集而成的二维表就是维度表,一般维度都是有限的。
下面是一个具体的维度建模的例子,以订单为例。
基于上面的理解,我们就可以比较好的了解我们的维度建模了。这里我给出我个人的描述,这样会比较好理解一些。
维度建模,就是将我们的每一个业务过程,拆分为事实表和维度表,事实表对应着具体的指标度量,维度表对应着事实的描述,状态,也就事实对应的环境。
这种结构,将事实表置于中心,多个维度围绕着事实,如上图,这种结构呈现星状,所以这种模型,就叫星型模型。多个星型模型聚集在一起就叫星座模型。
从多个维度分析数据,也就叫做多维立方体分析,这里就不做过多介绍,后续在其他文章中介绍。
下面这个图可以用于理解星型模型与多维立方体分析。