一、数据仓库建模的意义
一个公司中会有多个业务业务系统,比如:OA系统、订单系统、财务系统、人事系统、仓储系统等,因此需要按照一定的组织结构将所有数据都整合起来,形成一个仓储平台。如果只是通过工具把所有的数据同步到同一个平台,这个过程只是在堆积数据,不仅会因数据冗余造成存储空间的浪费,也会因各系统部数据的差异导致需求指标计算错误。
二、ER实体模型
在数据系统中,将事物抽象为实体(Entity)、关系(Relationship)、属性来表示数据关联和事物的描述,这种对数据的抽象建模通常被称为ER实体关系模型
1、实体
一般是参与到过程的中主体,客观存在的,比如商品
2、属性
对主体的描述,比如商品的名称、颜色、尺寸等
3、关系
实体与实体之间产生的联系,比如商品与仓库,商品入库时就会产生库存
4、实体与实体之间的对照关系:
(1)1:1
1对1的关系,比如人与身份证之间,每个人只有一个身份证
(2)1:n
1对多的关系,比如学生与班级之间的关系,1个学生只属于一个班级,一个班级中可以有多个学生
(3)n:n
多对多的关系,比如学生与课程之间,每个学生可以选择多门课程,每门课程会有多个学生选择
注:通常在建模过程中,实体用矩形表示,关系用菱形表示、属性用椭圆表示,因此ER实体关系模型也称作E-R关系图
5、应用场景
ER模型是数据库设计的理论基础,几乎应用于所有的OLTP系统建模中,此外,在数据仓库的底层ods、dwd也多采用ER关系模型
三、维度模型
在维度建模过程中,可以将数据仓库中的表划分为事实表和维度表两种类型
1、事实表
在ER模型中抽象出了实体、关系、属性三种类型,每个操作型事件都会产生一个事实表,其中涉及到多个实体,比如:购物下单事件中涉及的主体包括客户、商品、商家,产生可度量值包括商品数量、金额、件数等
2、维表
维度就是看待事物的角度,维表一般为单一主键,在ER模型中,实体会带有自己描述性的属性,这些属性就称为维度。比如:商品的产生、颜色、单价等
3、模型
维度建模常用的类型有星型模型、雪花模型、星座模型。
(1)星型模型
由一个事实表和一组维表组成,且所有维表直接与事实表相连。其特点是不存在渐变维度,有一定数据冗余,效率相对较高。在维表设计方面通常采用降维的方式,通过数据冗余来简化模型,以提高模型易用性和分析效率,标准的星型模型只有一层维度
(2)雪花模型
由一个事实表和多个维表组成,且有一个或多个维表通过其他维表与事实表相连。其特点是数据冗余较少,但由于表连接的增加,导致效率相对较低。其设计通常遵循3NF关系模式,但是往往无法严格遵守,因为需付出的性能成本较高
(3)星座模型
通常基于多个事实表,且多个事实表之间共享一些维度表,往往应用于数据关系比星型模型和雪花模型更复杂的场合
4、星型与雪花模型的对比
(1)数据冗余
星型模型的维表设计不遵循3NF关系模式,维表之间不会直接相连,牺牲了部分存储空间;雪花模型符合业务逻辑设计,采用3NF关系模式,有效降低了数据冗余
(2)模型性能
星型模型违反3NF关系模式,采用降维的操作将维度整合,以存储空间为代价有效降低维度表的连接数数量,性能较雪花模型高;雪花模型由于存在维度间的关联,采用3NF关系模式降低冗余,通常在使用过程中,需要连接更多维表,导致性能偏低
(3)ETL难度
星型模型在设计维度表时违反3NF关系模式,所以在ETL过程中整合业务数据维度表有一定的难度,但由于避免附属维度,可并行化处理;雪花模型符合业务ER模型设计原则,在ETL过程中相对简单,但是由于附属模型的限制,ETL任务并行化较低
5、模型选择
在工作中常用的设计模型为星型和雪花模型,在开发工作中通常会两者并存,同时保存单层维度和多层维度,从整体而言,星型模型的维度较少,从而减少了多表间的join连接,使得shuffle减少,性能较好