目录
[4、进一步范式化:BCNF、4NF 和 5NF 简介](#4、进一步范式化:BCNF、4NF 和 5NF 简介)
[(1)Boyce-Codd 范式(BCNF)](#(1)Boyce-Codd 范式(BCNF))
[(1)范式化 (时间换空间)](#(1)范式化 (时间换空间))
一、范式
范式是符合某一种级别的关系模式的集合。构造数据库必须遵循一定的规则。在关系数据库中,这种规则就是范式。
在创建一个数据库的过程中,范化是将其转化为一些表的过程,这种方法可以使从数据库得到的结果更加明确。这样可能使数据库产生重复数据,从而导致创建多余的表。范化是在识别数据库中的数据元素、关系以及定义所需的表和各表中的项目等这些初始工作之后的一个细化的过程。
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(联机事务处理) 则是尽可能消除冗余,以提高变更的效率。因为这种应用无时无刻不在频繁变化。
二、范式模型
范式模型,即实体关系(ER)模型,数据仓库之父Immon提出的,从全企业的高度设计一个3NF模型,用实体加关系描述的数据模型描述企业业务架构,在范式理论上符合3NF。
特点:设计思路自上而下,适合上游基础数据存储,同一份数据只存储一份,没有数据冗余,方便解耦,易维护,缺点是开发周期一般比较长,维护成本高。
|------|------------------|----------------|
| 范式建模 | 传统企业数仓,如电信、金融行业等 | 业务相对稳定 |
| 维度建模 | 互联网公司 | 业务变化快,注重响应业务需求 |