数仓(二)数据建模

数仓建模

数据模型是抽象描述现实世界的一种工具和方法,是通过抽象的实体以及实体之间的关系来表达现实世界中事务以及事务之间关联关系的一种映射。在这里,数据模型表现的是实体以及实体和实体之间的关系,通过对实体以及实体与实体之间关系的定义和描述,来表达实际业务中具体的业务关系。数据仓库模型是数据模型中针对数据仓库应用系统的一种特定数据模型。

数据仓库建模的发展历程:

img

建立比较好的数据模型能够有以下好处:

  • 性能:良好的数据模型能够快速查找到数据,减少IO时间,提高吞吐率
  • 成本:良好的数据模型能够节省企业存储数据的成本,提高企业效益
  • 质量:良好的数据模型能够改善统计口径的不一致,减少计算错误的可能性

数据仓库建模方法可分为以下几种:

  • 维度建模
    • 星型模型
    • 雪花模型
    • 星座模型
  • 范式模型
    • 3NF
  • Data Vault模型
    • Hub
    • Link
    • Satellite
  • Anchor模型

表分类

事实表

事实表指的是用于存储事件事实的表。例如存储系统日志、交易记录、销售记录等;事实表记录不断的动态增长,所以他的体量远大于其他的表。

事实表作为数据仓库的核心,根据业务过程来进行设计,包含了维度外键和业务相关的度量值。

维度表

维度表也称为维表,它用于存储维度的属性值,可以跟事实表相关联,相当于将事实表中经常重复出现的属性进行抽离、规范出来一张单独的表进行进行管理。常见的维度表有:日期表(存储与日期对应的周、月、季度等的属性)、地点表(包含国家、省/州、城市等属性)等。维度是维度建模的基础和灵魂,使用维度表有诸多好处,具体如下:

  • 缩小了事实表的体量
  • 便于维度的管理和维护。增加和删除维度的属性对事实表无影响。
  • 维度表可以为多个事实表重用,以减少重复的工作。

维度退化

维度退化其实就是将维度表中的数据放入事实表中,减少维度数量以及减少维度与事实表的关联。多见于交易和累积快照事实表中。

范式建模

在表设计过程中,当表结构不能在继续拆分的情况下,这种关系是规范化的,一种低级范式分解为更高级的范式就成为规范化。

范式一共分为五个范式,第一范式到第五范式。第一范式最低级。第五范式最高级。最常用的就是第一范式到第三范式。

在关系数据模型设计中,一般需要满足第三范式的要求。如果一个表有良好的主外键设计,就应该是满足3NF的表。

  • 第一范式:如果表中的所有字段值都是不可分割的原子值,则说明符合第一范式。例如住址字段的值为"xx省xx式",该字段就不符第一范式,因为该字段可以拆分成省字段、市字段。
  • 第二范式:在第一范式的基础之上,表中的所有字段都与主键相关,而不是主键的一部分。另一种理解就是一张表中不能存两种或者两种以上的数据。
  • 第三范式:确保每一列都和主键直接关联,而不是间接关联。

规范化带来的好处是通过减少数据冗余提高更新数据的效率,同时保证数据完整性。然而,我们在实际应用中也要防止过度规范化的问题。规范化程度越高,划分的表就越多,在查询数据时越有可能使用表连接操作。

而如果连接的表过多,会影响查询的性能。关键的问题是要依据业务需求,仔细权衡数据查询和数据更新的关系,制定最适合的规范化程度。还有一点需要注意的是,不要为了遵循严格的规范化规则而修改业务需求。

维度建模

维度建模法最早是有Kimball提出来的。其中心思想就是,按照事实表维度表来构建数据仓库。这种建模方法最被人广泛只晓得名字就是星型模型、雪花模型和星座模型。

维度建模以分析决策需求出发构建模型,构建的数据模型主要为了分析需求提供服务,因此他重点解决的是用户如何快速完成分析需求,同时还有较好的大规模复杂查询的响应性能。维度建模是面向分析的,为了提高查询性能可以增加数据冗余,反规范化设计。

星型模型

星型模型中有一种事实表和多个维度表组成,事实表和维度表通过主键和外键相关联,维度表之间没有关联,当所有维度表都直接关联到一个事实表时,整个图例就像星星一样,故称该模型为星型模型。星型模型是最简单、最常用的模型。因为星型模型只有一张大表,所以他更适用于大数据处理

图片

星型模型在数据仓库建模中应用非常广泛,之所以应用非常广泛,是因为他对各个维度提前做了处理,例如统计、分类、排序等,通过这些预处理,极大地提升了数据仓库的处理能力。与之3NF建模方法对比,星型模型在性能上占据明显的优势。

设计步骤:

  1. 选择需要进行分析决策的业务过程。业务过程可以是单个业务事件,比如交易的支付、退款等;也可以是某个事件的状态,比如当前的账户余额等;还可以是一系列相关业务事件组成的业务流程,具体需要看我们分析的是某些事件发生情况,还是当前状态,或是事件流转效率。
  2. 选择粒度。在事件分析中,我们要预判所有分析需要细分的程度,从而决定选择的粒度。粒度是维度的一个组合。
  3. 识别维表。选择好粒度之后,就需要基于此粒度设计维表,包括维度属性,用于分析时进行分组和筛选。
  4. 选择事实。确定分析需要衡量的指标

雪花模型

当有一个或者多个维表没有直接关联到事实表中,而是通过其他维表关联到事实表上,其图例就像多个雪花连接到一起,故称为雪花模型。雪花模型是对星型模型的扩展。他对星型模型进行了层次化,原有各个维表可能被拆分成多个小的维表,这些小维表都连接到主维表,而不是事实表。如图,将地域维表又分解为国家,省份,城市等维表。它的优点是 : 通过最大限度地减少数据存储量以及联合较小的维表来改善查询性能。雪花型结构去除了数据冗余。

图片

星系模型

星座模型是由星型模型延伸而来,星型模型是基于一张事实表而星座模式是基于多张事实表,并且共享维度表信息,这种模型往往应用于数据关系比星型模型和雪花模型更复杂的场合。星座模型需要多个事实表共享维度表,因而可以视为星形模型的集合,故亦被称为星系模型

图片

模型对比

图片

建模原则

  • 高内聚低辑合:将业务相近或者相关、颗粒度相同的数据设计为一个逻辑或者物理模型。将高概率同时访问与低概率同时访问的数据分开存储,高概率同时访问的数据放在一起。
  • 核心模型和扩展模型分开:建立核心模型和扩展模型,核心模型包括的字段支持常用的核心业务,扩展模型包括的字段支持少量或者个性应用的需要,不能让扩展模型的字段过多的侵入核心模型中,以免破坏核心模型的简洁性和可维护性。
  • 公共处理逻辑下沉与单一:越是公共的处理逻辑,越应该在数据调度依赖的底层进行封装和实现,不能让公共的处理逻辑暴露给应用层,不要让公共处理逻辑存在于多处
  • 成本与性能:适当的冗余可以提高查询性能,但要根据实际的成本考虑
  • 数据可回滚:处理逻辑不变。不同时间的多次运行数据的结果应该保持不变
  • 数据一致性:具有相同意义的字段,在不同的表中命名必须相同,必须使用规范定义中的名称
  • 命名清晰易于理解:表和字段的命名要清晰、一致、表名或者字段名要易于消费者的理解和使用
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值