关系数据库规范化理论

SonderLau ... 2020-06-22 Notes
  • 数据库
大约 3 分钟

# 关系数据库规范化理论


# 关系规范化的作用

一般建立表之后 存在的问题

  • 数据冗余度大
    • 存放重复的数据过多
  • 修改异常
    • 修改容易造成数据的不一致性
  • 插入与删除异常
    • 增加数据和删除数据的时候 会被强迫需要完善几个实体的内容

# 函数依赖

# 属性间的关系

第二章讲到了实体与实体之间的联系

下面将介绍实体内部各个属性间的联系

  • 一对一联系 1:1
  • 一对多联系1:n 多对一联系n:1
  • 多对多联系n:n

数据之间互相依赖又互相制约的反应 称为属性间的数据依赖

数据依赖有三种

# 函数依赖 Functional Dependency

假设给定一个属性的值 那么可以唯一确定到另一个属性的值

我们称 后者属性 函数依赖于 前者属性

$X \rightarrow Y \quad X Y \quad $

如果两属性之间

  • 1:1
    • XYX \leftrightarrow Y
  • m:1
    • XYX \rightarrow Y
  • m:n
    • \nrightarrow

如果 X 函数依赖于 Y 且 YXY \subseteq X 则称为平凡函数依赖

反之则称 非平凡函数依赖

# 码的定义

  • K 决定关系的所有其他属性
  • 没有一个 K 的真子集 能够决定关系的其他属性

# 外部码

设有两个关系模式 R 和 S

X 是 R 的属性或属性组 并且 X 不是 R 的码 但是 X 是 S 的码

则称 X 是 R 的外部码

# 关系模式的规范化

# 第一范式 1NF

若关系模式 R 中不包含多值属性 则 R 满足第一范式

记作 R1NFR \in 1NF

# 第二范式 2NF

如果一个关系 R 属于 1NF 并且它的所有非主属性都完全函数依赖于 R 的任一候选码 则 R 属于第二范式

记作 R2NFR \in 2NF

设 X Y 是关系 R 的两个不同的属性或属性组 且 XYX \rightarrow Y

如果存在 X 的某一个真子集 X` 使得 $X' \rightarrow Y $

则称 Y 部分函数依赖于 X 记作 XPYX \xrightarrow{P} Y

反之 称 Y 完全函数依赖于 X 记作 XFYX \xrightarrow{F} Y

TIPS:其实就是说 非主属性 只能由全部的主属性推出

如果关系模式 R 是 1NF 且他的每一个候选码都是单属性码 则 R 是 2NF

# 第三范式 3NF

如果关系模式 R 属于 2NF 且它的每一个非主属性都不传递依赖于任何候选吗 则称 R 是第三范式

在关系 R 中 如果 X Y Z 是 R 的三个不同的属性或属性组

如果 XYYZbutYXX \rightarrow Y \quad Y \rightarrow Z \quad but \ \quad Y \nrightarrow X 且 Y 不是 X 的子集 称 Z 传递依赖于 X 如果关系模式 R 是 1NF 且它的每一个非主属性既不部分依赖 也不传递依赖于任何候选码 则 R 是 3NF 不存在主属性的关系模式一定为 3NF

# BFNF - 改进的第三范式

设关系模式 R(U,F)1NFR(U,F) \in 1NF 若 F 的任一函数依赖 XY(YX)X \rightarrow Y (Y \nsubseteq X) 中 X 都包含了 R 的一个码 则称 R 属于 BCNF

进而可以得到推论 BCNF 范式的关系满足

  • R 中所有非主属性对每一个码都是完全函数依赖
  • R 中所有主属性对每一个不包含它的码 都是完全函数依赖
  • R 中没有任何属性完全函数依赖于非码的任何一组属性

总结

  • 1NF -> 2NF 消除非主属性对候选关键字的部分函数依赖
  • 2NF -> 3NF 消除非主属性对候选关键字的传递函数依赖
  • 3NF -> BCNF 消除主属性对候选关键字的部分和传递函数依赖
上次编辑于: 2021年11月15日 17:39
贡献者: SonderLau