推荐阅读:数据库设计三大范式
第一范式:确保数据库表中的所有字段都是不可分解的原子值
第二范式:在第一范式的基础上更进一层,需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(如联合主键)。也就是说,一个表中只能保存一种数据,不可以把多种数据保存在同一张表中
第三范式:确保数据表中每一列数据都和主键直接相关,而不能间接相关。比如在设计一个订单数据表的时候,可以将客户编号作为一个外键和订单表建立相应的关系。而不可以在订单表中添加关于客户其它信息(比如姓名、所属公司等)的字段。
有四种模型:ER 模型、维度模型、Data Vault 模型、Anchor 模型。用的较多的是维度模型和 ER 模型。
用实体关系描述业务,满足数据库的第三范式。
维度建模按照 事实表 和 维度表 来构建数仓。
① 事实表
事实表是指存储有事实记录的表,比如系统日志、销售记录等。事实表的记录在不断地动态增长,所以它的体积通常远大于其他表。
事实表作为数据仓库建模的核心,需要根据业务过程来设计,一般包括 引用的维度 和 业务过程有关的度量。
② 维度表
维度表保存了维度的属性值,可以跟事实表做关联。相当于把事实表上经常重复出现的属性抽取、规范出来用一张表进行管理 。
常见的维度表有:日期表(存储与日期对应的周、月、季度等属性)、地点表(包含国家、省、市等属性)。维度是维度建模的基础和灵魂。
使用维度表的优势:
事实表和维度表的关系:
OLAP(On-Line Analysis Processing),联机分析处理,即从数据仓库中抽取数据进行分析。
OLTP(On-Line Transaction Processing),联机事务处理,即执行基本的、日常的事务处理,比如数据库的增删改查。
数据源 -> ETL -> 数据仓库存储与管理 -> OLAP -> BI 工具
数据源:主要包括存放于 RDBMS 中的各种业务处理数据和各类文档数据
BI 工具:即前端工具,基于数仓的分析工具
ODS(Operation Data Store)存储的是面向业务系统的数据,也是最接近数据源的一层。数据源的数据经过 ETL 后,首先会装入本层。
为了考虑后续可能追溯数据,因此这一层不用做过多的数据清洗工作,原封不动接入元数据即可,至于数据的去噪、去重、异常处理等过程可以放在后面的 DW 层
DW(Data Warehouse)是数据仓库的核心,从 ODS 层中获得的数据按照主题建立各种数据模型。DW 又细分为:
① 数据明细层:DWD(Data Warehouse Detail)
该层一般保持和 ODS 层一样的数据粒度,并且进行数据清洗,将数据进行规范化处理。
同时为了提高数据明细层的易用性,该层会采用一些维度退化手法,将维度退化到事实表中,减少事实表和维度表的关联。另外在该层也会做一部分的数据聚合,将相同主题的数据汇集到一张表中,提高数据的可用性
② 数据中间层:DWM(Data Warehouse Middle)
在 DWD 层的数据基础上,对数据做轻度的聚合操作,生成一系列的 中间表 提升公共指标的复用性,减少重复加工。直观来说,就是对通用的核心维度进行聚合操作,算出相应的统计指标
③ 数据服务层:DWS(Data Warehouse Service)
按照业务划分,例如流量、订单、用户等,生成字段比较多的宽表,用于后续的业务查询、OLAP 分析等。
ADS(Application Data Service)数据应用层,面向业务定制的应用数据。
比如理清业务方的需求后,盘点现有的数仓表是否可以支持,看以前有没有类似的需求。
数据仓库的分层其实是为了更好地去组织、管理和维护数据。
我们使用表的时候可以更方便地定位到某一层,然后去使用这一层表的数据。
并且由于规范了数据分层,开发了一些通用的中间层数据,能够减少极大地重复计算。
星型模型:所有的维度表全都直接连到事实表上。
星型架构有一定的冗余,例如在 Adveertiser_dimension 表中,存在(id A ,name B ,address C) 以及(id A ,name B ,address D )两条记录,那么 id A 和 name B 的信息分别存储了两次,即存在冗余。当根据 id A 查询 name 的时候,会发现有多条数据,且 name 都是 B。
雪花模型:当有若干个维表没有直接连接到事实表上,而是通过其他维表连接到事实表上。
区别: