【数据仓库】数据仓库常见的数据模型——范式模型

目录

一、范式

1、第一范式

2、第二范式

3、第三范式

[4、进一步范式化:BCNF、4NF 和 5NF 简介](#4、进一步范式化:BCNF、4NF 和 5NF 简介)

[(1)Boyce-Codd 范式(BCNF)](#(1)Boyce-Codd 范式(BCNF))

(2)第四范式(4NF)

(5)第五范式(5NF)

5、反范式化

6、范式化设计和反范式化设计的优缺点

[(1)范式化 (时间换空间)](#(1)范式化 (时间换空间))

(2)反范式化(空间换时间)

7、OLAP和OLTP中范式设计

二、范式模型


一、范式

范式是符合某一种级别的关系模式的集合。构造数据库必须遵循一定的规则。在关系数据库中,这种规则就是范式。

在创建一个数据库的过程中,范化是将其转化为一些表的过程,这种方法可以使从数据库得到的结果更加明确。这样可能使数据库产生重复数据,从而导致创建多余的表。范化是在识别数据库中的数据元素、关系以及定义所需的表和各表中的项目等这些初始工作之后的一个细化的过程。

1、第一范式

1NF要求属性具有原子性,即列不可再分解。

详解,

**即每个字段只能包含一个值,而不能包含重复的组或集合。**此外,表中的每一行都必须是唯一的。

※原子性是根据使用方便来自定义的最小单位。

2、第二范式

在符合第一范式的基础上, 2NF要求记录有唯一标识,即并且所有非主属性(Non-Primary Attributes)完全依赖于主键(Primary Key)。

详解,

(1)主键的唯一性:每个表必须有一个主键,该主键可以是单一字段或由多个字段组成的复合主键,用于唯一标识表中的每一行。

(2)非主属性的完全依赖 :++表中的非主属性不能依赖于主键的一部分,而必须依赖于整个主键。++如果存在仅依赖于主键一部分的非主属性,则需要将这些属性和它们所依赖的主键部分分离出来,形成新的表,以保持数据的规范化和减少冗余。

3、第三范式

在符合第二范式的基础上,3NF要求所有非主属性不仅完全依赖于主键,还不能传递依赖于主键。

详解,

表中的非主属性不能依赖于其他非主属性。

第三范式旨在进一步减少数据冗余,提高数据的一致性和完整性。它要求字段没有冗余,即不存在传递依赖。

4、进一步范式化:BCNF、4NF 和 5NF 简介

(1)Boyce-Codd 范式(BCNF)

BCNF 是第三范式的一个扩展和加强。它要求表中的每个决定因素(Determinant)必须是候选键。 这意味着在 BCNF 中,任何非平凡的函数依赖关系的决定因素都必须是超键。

(2)第四范式(4NF)

第四范式在 BCNF 的基础上,进一步解决了多值依赖(Multivalued Dependency)的问题。4NF 要求表中不能存在非平凡且不相等的多值依赖。

(5)第五范式(5NF)

第五范式解决的是连接依赖(Join Dependency)的问题。5NF 要求每个关系模式必须能够通过其投影(Projection)重构出原始关系,而不引入任何多余的数据。

5、反范式化

一般说来,数据库只需满足第三范式(3NF)就行了。

没有冗余的数据库设计可以做到。但是,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。

具体做法是:在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,允许冗余,达到以空间换时间的目的。

〖例〗:有一张存放商品的基本表,如表1所示。"金额"这个字段的存在,表明该表的设计不满足第三范式,因为"金额"可以由"单价"乘以"数量"得到,说明"金额"是冗余字段。但是,增加"金额"这个冗余字段,可以提高查询统计的速度,这就是以空间换时间的作法。

6、范式化设计和反范式化设计的优缺点

(1)范式化 (时间换空间)

|------------------------------------|-----------------------|
| 优点: | 缺点: |
| 范式化的表减少了数据冗余,数据表更新操作快、占用存储空间少。 | 查询时需要对多个表进行关联,查询性能降低。 |
| 确保数据一致性;提高数据的可维护性 | 更难进行索引优化 |

(2)反范式化(空间换时间)

反范式的过程就是通过冗余数据来提高查询性能,但冗余数据会牺牲数据一致性

|------------|--------------------------|
| 优点: | 缺点: |
| 可以减少表关联 | 存在大量冗余数据 |
| 可以更好进行索引优化 | 数据维护成本更高(删除异常,插入异常,更新异常) |

7、OLAP和OLTP中范式设计

OLAP(联机分析处理) 一般冗余比较多,以查询分析为主,这种一般都是采用反范式设计,以提高查询效率。更新一般是定时大批量数据插入。

OLTP(联机事务处理) 则是尽可能消除冗余,以提高变更的效率。因为这种应用无时无刻不在频繁变化。

上述部分引用自:
深入解析数据库设计的三大范式:确保数据结构的完美设计_数据库范式-CSDN博客

一篇文章搞懂数据仓库:三范式与反范式_olap 数仓 范式-CSDN博客

二、范式模型

范式模型,即实体关系(ER)模型,数据仓库之父Immon提出的,从全企业的高度设计一个3NF模型,用实体加关系描述的数据模型描述企业业务架构,在范式理论上符合3NF

特点:设计思路自上而下,适合上游基础数据存储,同一份数据只存储一份,没有数据冗余,方便解耦,易维护,缺点是开发周期一般比较长,维护成本高。

|------|------------------|----------------|
| 范式建模 | 传统企业数仓,如电信、金融行业等 | 业务相对稳定 |
| 维度建模 | 互联网公司 | 业务变化快,注重响应业务需求 |

相关推荐
SelectDB2 小时前
飞轮科技荣获中国电信星海大数据最佳合作伙伴奖!
大数据·数据库·数据分析
小刘鸭!3 小时前
Hbase的特点、特性
大数据·数据库·hbase
Elastic 中国社区官方博客3 小时前
如何通过 Kafka 将数据导入 Elasticsearch
大数据·数据库·分布式·elasticsearch·搜索引擎·kafka·全文检索
nece0013 小时前
elasticsearch 杂记
大数据·elasticsearch·搜索引擎
开心最重要(*^▽^*)3 小时前
Es搭建——单节点——Linux
大数据·elasticsearch
学计算机的睿智大学生5 小时前
Hadoop的生态系统所包含的组件
大数据·hadoop·分布式
武子康5 小时前
大数据-259 离线数仓 - Griffin架构 修改配置 pom.xml sparkProperties 编译启动
xml·java·大数据·hive·hadoop·架构
qiquandongkh5 小时前
期权懂|期权新手入门知识:如何挑选期权活跃合约?
大数据·区块链
重生之绝世牛码6 小时前
Java设计模式 —— 【结构型模式】享元模式(Flyweight Pattern) 详解
java·大数据·开发语言·设计模式·享元模式·设计原则
喝醉酒的小白6 小时前
ElasticSearch 的核心功能
大数据·elasticsearch·jenkins