1、范式理论
范式:表示一个关系内部各属性之间的联系的合理化程度,范式级别越高,表的设计就越标准。
①零范式
它只满足一个最基本的条件——数据中不存在重复数据。
②一范式
在零范式的基础上加上字段具有原子性即属性不可分这个条件后便形成了符合一范式的表。基于
上面的保险订单统计表一范式和零范式的区别主要在于将表中的“购买信息”这个字段进行了拆分,
形成了“保险价格”和“购买数量”两个字段,这样的数据表我们称其满足一范式。
③二范式
相对于一范式,二范式的条件更为严苛。如果要满足二范式,则数据表需要确保每一列都和主键完全相关,而不能只与主键的某一部分相关
④三范式
三范式需要确保数据表中的每一个字段都直接依赖该表的主键,而不能间接依赖。经过二范式的拆解后,已经将最初的一张表变成了三张表。
在这三张表中,我们发现用户信息表中的用户ID和注册地址信息是存在传递依赖的,即:用户ID决定地址ID,地址ID决定省份、城市、区县,
这属于传递依赖。因此,需要将用户信息表地址信息表中的地址单独拎出来才满足三范式。
在第二范式、第三范式中,都是对维度进行了提取,独立成表
总结一点就是:为了降低冗余,拆分表,使属性之间的联系越紧密!!
2、关系建模和维度建模
①关系建模:
面向应用,遵循第三范式,以消除数据冗余为目标的设计技术:
设计出来的样子应该是:
优点:降低了数据的冗余
缺点:查询大部分数据都需要join
②维度建模:
①面向分析,为了提高查询性能可以增加数据冗余,反规范化的设计技术
②主要是按照事实表、维度表来构建数据仓库、数据集市,也就是说通过维度表对事实表进行注解!!
设计出来的样子应该是:
注:从关系建模的缺点来看,数据仓库是不适合关系建模方式的,因为大量的join会使得计算延迟,查询效率低。
3、维度建模
根据事实表和维度表的关系,又可将常见的维度模型分为星型模型、雪花型模型、星座模型。
①星型模型:
星型架构是一种非正规化的结构,多维数据集的每一个维度都直接与事实表相连接,不存在渐变维度,所以数据有一定的冗余
设计出来的样子应该是:
②雪花模型:
星型模型因为数据的冗余所以很多统计查询不需要做外部的连接,因此一般情况下效率比雪花型模型要高。
星型结构不用考虑很多正规化的因素,设计与实现都比较简单。
雪花型模型由于去除了冗余,有些统计就需要通过表的联接才能产生,所以效率不一定有星型模型高
设计出来的样子应该是:
注:正规化也是一种比较复杂的过程,相应的数据库结构设计、数据的 ETL、以及后期的维护都要复杂一些。
因此在冗余可以接受的前提下,实际运用中星型模型使用更多,也更有效率。
③星座模型
数据仓库由多个主题构成,包含多个事实表,而维表是公共的,可以共享,这种模式可以看做星型模型的汇集
设计出来的样子应该是: