MySQL数据库基础(十三):关系型数据库三范式介绍
关系型数据库三范式介绍
一、什么是三范式
设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。
二、数据冗余
数据冗余是指数据之间的重复,也可以说是同一数据存储在不同数据文件中的现象
三、范式的划分
根据数据库冗余的大小,目前关系型数据库有六种范式,各种范式呈递次规范,越高的范式数据库冗余越小。
六种范式:
- 第一范式(1NF)
- 第二范式(2NF)
- 第三范式(3NF)
- 巴斯-科德范式(BCNF)
- 第四范式 ( 4NF)
- 第五范式(5NF,又称完美范式)
一般遵循 前三种范式即可
四、一范式
第一范式(1NF): 强调的是字段的原子性,即一个字段不能够再分成其他几个字段。
这种表结构设计就没有达到 1NF,要符合 1NF 我们只需把字段拆分,即:把 contact 字段拆分成 name 、tel、addr 等字段。
五、二范式
第二范式(2NF): 满足 1NF的基础上,另外包含两部分内容
- 一是表必须有一个主键
- 二是非主键字段必须完全依赖于主键,而不能只依赖于主键的一部分
OrderDetail表的主键是什么?
主键的定义:能够确定唯一一行记录的特殊字段
create table test (
name varchar(19),
id int,
primary key (name,id)
)
这里有主键由OrderID和ProductID共同组成
同时 UnitPrice 和 ProductName 这里两个字段 与ProductID的从属关系强于他们同OrderID的从属关系
六、三范式
第三范式(3NF): 满足 2NF
另外非主键字段必须直接依赖于主键,不能存在传递依赖。
即不能存在:非主键字段 A 依赖于非主键字段 B,非主键字段 B 依赖于主键的情况。
因为 OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity 等非主键字段都完全依赖于主键(OrderID),所以符合 2NF。
不过问题是 CustomerName,CustomerAddr,CustomerCity 直接依赖的是 CustomerID(非主键列),而不是直接依赖于主键,它是通过传递才依赖于主键,所以不符合 3NF。
把【Order】表拆分为【Order】(OrderID,OrderDate,CustomerID)和【Customer】(CustomerID,CustomerName,CustomerAddr,CustomerCity)从而达到 3NF。
七、总结
概念:
设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。
三范式:
- 第一范式(1NF): 强调的是列的原子性,即列不能够再分成其他几列。
- 第二范式(2NF): 满足 1NF,另外包含两部分内容,一是表必须有一个主键;二是非主键字段 必须完全依赖于主键,而不能只依赖于主键的一部分。
- 第三范式(3NF): 满足 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。
- 点赞
- 收藏
- 关注作者
评论(0)