互联网技术 / 互联网资讯 · 2023年11月21日 0

数仓模型设计解析

前言

今天我将为大家解析数据仓库中的模型设计。一个成功的数据仓库项目需要从其架构和所采用的模型入手,这些模型之间的设计都颇具巧思。接下来,我们就直接进入主题。

一、维度建模的基本概念

维度模型是数据仓库领域的权威Ralph Kimball所提倡的,他的著作《数据仓库工具箱》被视为数据仓库建模的经典之作。维度建模旨在满足分析决策的需求,所构建的数据模型专注于支持分析需求,因此,它着重于提升用户完成分析的速度,同时确保复杂查询的良好响应性能。

维度建模主要用于分析型数据库、数据仓库和数据集市的建模。数据集市可以被视为一种小型的数据仓库。

1.1 事实表

现实世界中发生的可度量事件,其产生的数值存储在事实表中。从最小粒度来看,事实表的每一行对应一个度量事件,反之亦然。

事实表用于表示分析主题的度量。例如,一次购物行为可视为一个事实。

图中的订单表就是一个事实表,可以理解为现实中发生的一次操作性事件,每完成一个订单,订单表中将增加一条记录。

事实表的特点在于,它并不存储实际内容,而是由主键组成的集合,这些主键能够对应维度表中的记录。事实表包含了与各维度表关联的外键,可以与维度表连接。事实表的度量通常为数值类型(如条、个、次),且记录数会不断增加,导致数据规模迅速扩大。

1.2 维度表

维度表是进行数据分析时所用的量。例如,分析产品销售情况时,可以按类别或区域进行分析,这样的分析方式构成一个维度。图中的用户表、商家表和时间表都属于维度表。这些表都有唯一的主键,并存放详细的数据信息。

每个维度表都包含单一的主键列,这个主键可作为关联的任何事实表的外键。维度表行的描述需与事实表行完全对应。维度表通常是比较宽的,属于扁平型非规范表,包含大量低粒度的文本属性。

总体而言,在数据仓库中不需要严格遵循规范化设计原则。因为数据仓库的主要功能是面向分析,以查询为主,而不涉及数据更新操作。

事实表的设计以准确记录历史信息为准则。

维度表的设计则以能够从合适的角度聚合主题内容为准则。

二、维度建模的三种模式

2.1 星型模型

星型模型(Star Schema)是最常见的维度建模方式。星型模型以事实表为中心,所有维度表直接连接于事实表,形成星形结构。

星型模型的特点包括:维度表只与事实表关联,维度表之间没有关联;每个维度表的主键为单列,并在事实表中作为外键;以事实表为核心,维度表围绕核心呈星形分布。

2.2 雪花模式

雪花模式(Snowflake Schema)是对星型模型的扩展。在雪花模式中,维度表可以拥有其他维度表的连接。尽管该模型相较于星型更为规范,但因其理解难度较高、维护成本高,且在性能上需要关联多层维度表,通常不被广泛使用。

2.3 星座模式

星座模式是星型模型的延伸,基于多张事实表并共享维度信息。前面提到的两种维度建模方法通常是多维表对应单一事实表,但在许多情况下,维度空间内可能有多个事实表,而一个维度表也可能被多个事实表共享。在业务发展的后期,绝大多数的维度建模都会采用星座模式。

总结

本文主要介绍了维度模型的三种模式。在设计数据仓库时,建议将表设计为星型模型或雪花模型,这样在实现功能时会更加简便,因为这两种模型的架构基本上是一对多的关系。