一、关系模式
关系型数据库设计时,遵照一定的规范要求,目的在于降低数据的冗余性和数据的一致性,目前业界范式有:

第一范式(1NF)
第二范式(2NF)
第三范式(3NF)
巴斯-科德范式(BCNF)
第四范式(4NF)
第五范式(5NF)

1)第一范式(1NF)

域都是原子性的,即数据库表的每一列都是不可分割的原子数据项。

例如下面这张表:

三种数据仓库体系结构比较 三种数据仓库模型_数据

“商品”字段就不是原子性的,可以分割成“4件”和“毛衣”。

2)第二范式(2NF):

在1NF的基础上,实体的属性完全依赖于主关键字,不能存在仅依赖主关键字一部分的属性,也就是不存在局部依赖。

例如下面这张表:

三种数据仓库体系结构比较 三种数据仓库模型_数据_02


主键ID为“学生ID,所修课程”,但是字段“所属系”只依赖于“学生ID”,不符合2NF。

3)第三范式(3NF):

在2NF的基础上,任何非主属性不依赖于其它非主属性,也就是不存在传递依赖。

例如下面这张表:

三种数据仓库体系结构比较 三种数据仓库模型_三种数据仓库体系结构比较_03


主键为“订单ID”,但是字段“商品颜色”依赖于“商品ID”,不符合3NF。

二、常见数仓建模方法:

1、ER实体模型

在信息系统中,将事务抽象为“实体”(Entity)、“属性”(Property)、“关系”(Relationship)来表示数据关联和事物描述,这种对数据的抽象建模通常被称为ER实体关系模型。
实体:通常为参与到过程中的主体,客观存在的,比如商品、仓库、货位、汽车,此实体非数据库表的实体表。
属性:对主体的描述、修饰即为属性,比如商品的属性有商品名称、颜色、尺寸、重量、产地等。
关系:现实的物理事件是依附于实体的,比如商品入库事件,依附实体商品、货位,就会有“库存”的属性产生;用户购买商品,依附实体用户、商品,就会有“购买数量”、“金额”的属性产品。
在日常建模中,“实体”用矩形表示,“关系”用菱形,“属性”用椭圆形。ER实体关系模型也称为E-R关系图。
实体之间建立关系时,存在对照关系:

1:1:即1对1的关系
1:n:即1对多的关系
n:m:即多对多的关系

Inmon提出的集线器的自上而下(EDW-DM)的数据仓库架构。操作型或事务型系统的数据源,通过ETL抽取转换和加载到数据仓库的ODS层,然后通过ODS的数据建设原子数据的数据仓库EDW,EDW不是多维格式的,不方便上层应用做数据分析,所以需要通过汇总建设成多维格式的数据集市层。优势:易于维护,高度集成;劣势:结构死板,部署周期较长
应用场景:

1、ER模型是数据库设计的理论基础,当前几乎所有的OLTP系统设计都采用ER模型建模的方式。
2、Bill Inom提出的数仓理论,推荐采用ER关系模型进行建模。
3、BI架构提出分层架构,数仓底层ods、dwd也多采用ER关系模型进行设计

但是由于EDW的数据是原子粒度的,数据量比较大,完全规范的3范式在数据的交互的时候效率比较低下,所以通常会根据实际情况在事实表上做一些冗余,减少过多的数据交互。

二、维度建模

Kimball提出的总线式的自下而上(DM-DW)的数据仓库架构。同样的,操作型或事务型系统的数据源,通过ETL抽取转换和加载到数据仓库的ODS层,然后通过ODS的数据,利用维度建模方法建设一致维度的数据集市。通过一致性维度可以将数据集市联系在一起,由所有的数据集市组成数据仓库。优势:构建迅速,最快的看到投资回报率,敏捷灵活;劣势:作为企业资源不太好维护,结构复杂,数据集市集成困难。
星型模型(推荐)和雪花模型
在复合式的数据仓库架构中,操作型或事务型系统的数据源,通过ETL抽取转换和加载到数据仓库的ODS层,然后通过ODS的数据,利用范式建模方法,建设原子数据的数据仓库EDW,然后基于EDW,利用维度建模方法建设数据集市。

当下的数据仓库模型架构设计中,dw层通常会采用范式建模,并且可以根据实际情况允许存在一些冗余。dm层通常会采用维度建模,因为采用维度建模构建出来的数据模型更加符合普通人的认知、易于被普通人所理解,从而有利于数据的推广使用。