1. 数据模型入门
1).数据模型概念
数据模型的定义:数据模型是抽象描述现实世界的一种工具和方法,是通过抽象的实体及实体之间联系的形式,来表示现实世界中事务的相互关系的一种映射。读起来有些拗口,可以简单理解为描述实体及关系的一个方法。
2).数据模型意义
引入数据模型,是为了方便人们了解客观世界。针对企业内的数据模型而言,可方便直观了解企业业务,帮助企业梳理、改善、优化业务流程。通过有效的建模,可以将企业内的数据有效地组织起来,有利于企业高性能、低成本、高效率、高质量的使用它们。
3).数据模型要素
数据模型描述的内容,可分为数据结构、数据操作和数据约束三部分。
2. 数据仓库模型
1).数仓模型类别
常用的模型设计,可遵循概念模型、逻辑模型、物理模型的类别进行设计
2).数仓模型分层
数据仓库模型设计,通常会划分为多个层次。其主要目的如下:
❖ 常见分层结构
常见的层次划分如下图,这是常见的一种划分方法。针对不同层的模型,可采用不同的建模方法,后面会详细谈到这点。
3. 数仓建模方法
1).关系(范式)建模
范式建模是数据仓库之父Inmon推崇的、从全企业的高度设计一个符合3NF模型,用实体加关系描述的数据模型描述企业业务架构。其基础是站在企业角度面向主题的抽象,而不是针对某个具体业务流程的实体对象关系抽象。它更多是面向数据的整合和一致性治理,正如Inmon所希望达到的“single version of the truth”。
❖ 建模方法
关系建模常常需要全局考虑,要对上游业务系统的进行信息调研,以做到对其业务和数据的基本了解,要做到主题划分,让模型有清晰合理的实体关系体系,以下是方法的示意:
2).维度建模
维度模型是数据仓库领域另一位大师Ralph Kimball 所倡导的。维度建模以分析决策的需求出发构建模型,构建的数据模型为分析需求服务,因此它重点解决用户如何更快速完成分析需求,同时还有较好的大规模复杂查询的响应性能,更直接面向业务。
❖ 建模方法
通常需要选择某个业务过程,然后围绕该过程建立模型,其一般采用自底向上的方法,从明确关键业务过程开始,再到明确粒度,再到明确维度,最后明确事实,非常简单易懂。
3).对比:关系模型vs维度模型
4. 数仓开发方法论
Kimball和Inmon是两种主流的数据仓库方法论,分别由 Ralph Kimbal大神 和 Bill Inmon大神提出,在实际数据仓库建设中,业界往往会相互借鉴使用两种开发模式。
1).Kimball:需求驱动
Kimball 模式从流程上看是是自底向上的,即从数据集市到数据仓库再到数据源(先有数据集市再有数据仓库)的一种敏捷开发方法,其是以最终任务为导向的。kimball采用了多维模型–星型模型,并且还是最低粒度的数据存储。先按照业务主线建立最小粒度的事实表,再建立维度表,形成数据集市,方便下一步的BI与决策支持。
❖ 开发过程
2).Inmon:数据驱动
Inmon 模式从流程上看是自底向上的,即从数据源到数据仓库再到数据集市的一种瀑布流开发方法。对于Inmon模式,数据源往往是异构的,是根据最终目标自行定制的。这里主要的数据处理工作集中在对异构数据的清洗,包括数据类型检验,数据值范围检验以及其他一些复杂规则。在这种场景下,数据无法从stage层直接输出到dm层,必须先通过ETL将数据的格式清洗后放入dw层,再从dw层选择需要的数据组合输出到dm层。在Inmon模式中,并不强调事实表和维度表的概念,因为数据源变化的可能性较大,需要更加强调数据的清洗工作,从中抽取实体-关系。
3).对比:Kimball vs Inmon
一般来讲,维度模型简单直观,适合业务模式快速变化的行业,关系模型实现复杂,适合业务模式比较成熟的行业。对于大多数互联网公司由于需求的快速变化,处心积虑设计(Inmon)实体-关系的设计哲学似乎并不能满足快速迭代的业务需要。所以,更多场景下趋向于使用(Kimball)维度-事实的设计哲学反而可以更快地完成任务。