数仓建模目标
1.访问性能:快速查询所需的数据,减少数据I/O
2.数据成本:减少不必要的数据冗余,实现计算结果数据复用,降低大数据系统中的存储成本和计算成本
3.使用效率:改善用户应用体验,提高使用数据的效率
4.数据质量:改善数据统计口径的不一致性,减少数据计算错误的可能性,提供高质量、一致的数据访问平台
范式理论
降低数据的冗余性和数据的一致性,目前范式有:
第一范式 - 第五范式、巴斯-科德范式(BCNF)
第一范式
域都是原子性的,数据库表的每一列都是不可分割的数据项
第二范式
在1NF的基础上,实体的属性完全依赖于主关键字,不能存在仅依赖住关键字一部分的属性,也就是不存在局部依赖。
第三范式
在2NF的基础上,任何非主体属性不依赖于其它非主属性,也就是不存在传递依赖。
建模方法
ER实体模型(关系建模)
实体:通常为参与到过程中的主体,客观存在的
属性:对主体的描述、修饰即为属性
关系:现实的物理事件是依附于实体的
实现步骤
1.抽象出主体
2.梳理主体之间的关系
3.梳理主体的属性
4.E-R关系图
其它
1.需要全面了解业务和数据
2.实施周期较长
Kimball(维度建模)
事实表
每个操作型事件,基本都是发生在实体之间,伴随发生会产生可度量的值,而这个过程会产生一个事实表,存储了每个可度量的事件。
事实表包含了与各维度表相关联的外键,并通过Join方式与维度表关联。
维度表
看待事物的角度,维度一般为单一主键。
维度建模通常分为星型模型和雪花模型。
星型模型
1.维表只和事实表关联,维表之间没有关联
2.每个维表的主键为单列,且主键放置在事实表中,作为两边连接的外键
3.以事实表为核心,维表围绕核心呈星型分布
雪花模型
对星型模型的扩展,每个维表可继续向外连接多个子维表。
星型模型和雪花模型的主要区别在于对维表的拆分;
对于雪花模型,维表的设计更加规范,一般符合3NF;而星型模型一般采用降维的操作,利用冗余来避免模型过于复杂,提高易用性和分析效率。
在实际项目中,更倾向于星型模型,以数据冗余来提高数据查询效率。