关系数据库规范化理论
# 关系数据库规范化理论
# 关系规范化的作用
一般建立表之后 存在的问题
- 数据冗余度大
- 存放重复的数据过多
- 修改异常
- 修改容易造成数据的不一致性
- 插入与删除异常
- 增加数据和删除数据的时候 会被强迫需要完善几个实体的内容
# 函数依赖
# 属性间的关系
第二章讲到了实体与实体之间的联系
下面将介绍实体内部各个属性间的联系
- 一对一联系
1:1
- 一对多联系
1:n
多对一联系n:1
- 多对多联系
n:n
数据之间互相依赖又互相制约的反应 称为属性间的数据依赖
数据依赖有三种
# 函数依赖 Functional Dependency
假设给定一个属性的值 那么可以唯一确定到另一个属性的值
我们称 后者属性 函数依赖于 前者属性
$X \rightarrow Y \quad X Y \quad $
如果两属性之间
1:1
m:1
m:n
如果 X 函数依赖于 Y 且 则称为平凡函数依赖
反之则称 非平凡函数依赖
# 码的定义
- K 决定关系的所有其他属性
- 没有一个 K 的真子集 能够决定关系的其他属性
# 外部码
设有两个关系模式 R 和 S
X 是 R 的属性或属性组 并且 X 不是 R 的码 但是 X 是 S 的码
则称 X 是 R 的外部码
# 关系模式的规范化
# 第一范式 1NF
若关系模式 R 中不包含多值属性 则 R 满足第一范式
记作
# 第二范式 2NF
如果一个关系 R 属于 1NF 并且它的所有非主属性都完全函数依赖于 R 的任一候选码 则 R 属于第二范式
记作
设 X Y 是关系 R 的两个不同的属性或属性组 且
如果存在 X 的某一个真子集 X` 使得 $X' \rightarrow Y $
则称 Y 部分函数依赖于 X 记作
反之 称 Y 完全函数依赖于 X 记作
TIPS:其实就是说 非主属性 只能由全部的主属性推出
如果关系模式 R 是 1NF 且他的每一个候选码都是单属性码 则 R 是 2NF
# 第三范式 3NF
如果关系模式 R 属于 2NF 且它的每一个非主属性都不传递依赖于任何候选吗 则称 R 是第三范式
在关系 R 中 如果 X Y Z 是 R 的三个不同的属性或属性组
如果 且 Y 不是 X 的子集 称 Z 传递依赖于 X 如果关系模式 R 是 1NF 且它的每一个非主属性既不部分依赖 也不传递依赖于任何候选码 则 R 是 3NF 不存在主属性的关系模式一定为 3NF
# BFNF - 改进的第三范式
设关系模式 若 F 的任一函数依赖 中 X 都包含了 R 的一个码 则称 R 属于 BCNF
进而可以得到推论 BCNF 范式的关系满足
- R 中所有非主属性对每一个码都是完全函数依赖
- R 中所有主属性对每一个不包含它的码 都是完全函数依赖
- R 中没有任何属性完全函数依赖于非码的任何一组属性
总结
1NF -> 2NF
消除非主属性对候选关键字的部分函数依赖2NF -> 3NF
消除非主属性对候选关键字的传递函数依赖3NF -> BCNF
消除主属性对候选关键字的部分和传递函数依赖