数据模型(下):反规范化和维度模型

接前文:

数据模型(上)_专治八阿哥的孟老师的博客-CSDN博客

数据模型(中):键和规范化_专治八阿哥的孟老师的博客-CSDN博客

5.反规范化

反规范化是选择性地违反规范化规则并在模型中重新引入冗余的过程,额外的冗余有助于降低数据检索的时间,且创建一个用户友好的模型。

数据冗余时,常用Rolldown和Rollup两种方式;Rolldown指信息合并至从表,Rollup指信息合并至主表。

5.1.Rolldown反规范化

Rolldown是最常见的反规范化方式,关系中的父实体将消失,父实体中所有的列和关系都下沉到子实体中。

当需要保持规范化模型的灵活性,降低开发时间和复杂性时,可以使用Rolldown反规范化。在Rolldown模式中,子实体仍然保留返回父实体的外键,一对一、一对多关系仍然被储存,但不在数据库中实施,模型仍保持灵活性。在查询时,不需要从一个表跳转到另一个表,降低了开发复杂性和时间花销。

5.2.Rollup反规范化

Rollup保留父实体,在父实体中保留子实体的内容,父子实体是一对多的关系,所以父实体中对应子实体的一列或者多列的组合会重复出现多次,需要指定出现的次数。

例如:当一个员工可以有多个(大于等于0)手机号的时候,在规范化的情况下,我们需要设置一张子表存储手机号:

在Rollup反规范化的情况下,我们要把手机号表上升到员工表,但是需要指定手机号的个数,如每个员工最多有3个手机号:

当父实体使用频率明显高于子实体时,保留父实体而替代子实体更有意义,可以使用Rollup模式,但要注意限制替代子实体的列的数量。

6.维度模型

维度模型和关系模型用途不同,关系模型(或者叫范式模型)侧重描述业务运作的过程,用于日常的基本的事务处理过程;而维度模型是分析数据的首选技术,是大数据分析的基础技术。维度模型存储的数据和关系模型包含的数据相同,但维度模型在数据分析时对大量数据进行汇总,批量导入,会存在数据冗余,方便得到结果。

维度是用来反映业务的一类属性,这类属性的集合构成一个维度。

维度模型有一张事实表,和多个维度表。

事实表是维度模型的基本表,事实表中一条记录所表达的业务细节程度被称为粒度,事实表中的每一行必须有相同的粒度。

事实表有多种类型:事务事实表用于跟踪空间或事件上某点的度量事件,比如在事实表中保存用户的每一条订单;周期快照事实表可以按照每天、每月、每年等规律的时间间隔记录事实;累计快照事实表用来表述过程开始和结束之间的关键步骤事件,通常有多个日期字段来记录关键时间点,记录随着过程的生命周期变化而改变。

维度表围绕着“What、Who、Where、When、Why、How”有关的事件,对业务信息进行描述。每个维度表都有自己的主键,维度表的主键可以作为与之关联的任何事实表的外键。维度表是进入事实表的入口。查询约束、分组、报表标识的主要来源是维度属性。

维度模型常见三种模式:星形模式、雪花模式、星座模式。

6.1.星型模式(Star Schema):

星型模式是最常用的一种维度建模方式,星型模式以事实表为中心,所有维度直接连接到事实表上,形状像星星。星型模型的特点:

  1. 维度表只和事实表关联,维度之间没有关联;

  2. 每个维度表主键为单独一列,且该主键放在事实表中,是事实表的外键;

  3. 以事实表为核心,维度表呈星形分布,如下图所示。

6.2.雪花模式(Snow flake Schema)

雪花模式是对星型模式的扩展,维度表可以有其他维度。雪花模式比星型模式更加规范,但雪花模式不太容易理解且维护成本比较高,一般不常用。

6.3.星座模式

星座模式基于星型模式延伸,星型模式基于一张事实表,维度之间不关联,而星座模式基于多张事实表,维度表可共享。

Rolldown模式可以用于维度模型中,在维度模型中不叫反规范化,而叫做扁平化(或平铺)。即一组相关的维度表被合并到一个维度表中。

参考资料:

《数据建模》[美]Steve Hoberman 著 丁永军 译

《数据架构之道——数据模型设计与管控》 王铮 主编

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

专治八阿哥的孟老师

您的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值