数据库原理——第六章:关系数据库理论

参考书目《数据库系统概论(第5版)》

问题的提出

  • 针对一个具体的问题,应该如何构建一个适用于它的数据库模式,即应该构建几个关系模式,每个关系由哪些属性组成等。这是数据库设计的问题,确切地讲是关系数据库逻辑设计问题(如何构造合适的数据模式)
  • 数据依赖是一个关系内部属性与属性之间的约束关系,这种约束关系是通过属性值的相等与否体现出来的数据间相关联系。
  • 一个好的关系模式不会发生插入异常删除异常更新异常数据冗余尽可能的少。

规范化

函数依赖

  • 定义:若属性组\(X\)能唯一确定属性组\(Y\),则称\(X\)函数确定\(Y\)\(Y\)函数依赖\(X\),记作\(X \rightarrow Y\)

  • \(X \rightarrow Y\),但\(Y \nsubseteq X\),则称\(X \rightarrow Y\)非平凡的函数依赖\(X\)称为这个函数依赖的决定属性,也称为决定属性

  • \(X \rightarrow Y\),但\(Y \subseteq X\),则称\(X \rightarrow Y\)平凡的函数依赖。对于任一关系模式,平凡函数依赖都是必然成立的,它不反映新的语义。若不特别声明,总是讨论非平凡的函数依赖。

  • \(X \rightarrow Y\)\(Y \rightarrow X\),则记作\(X \leftarrow \rightarrow Y\)(即直接函数依赖)

  • \(Y\)不函数依赖于\(X\),则记作\(X \nrightarrow Y\)

  • 定义:在\(R(U)\)中,如果\(X \rightarrow Y\),并且对于\(X\)的任何一个真子集\(X'\),都有\(X' \nrightarrow Y\),则称\(Y\)\(X\)完全函数依赖,记作\(X \stackrel{F}{\rightarrow} Y\)

  • \(X \rightarrow Y\),但\(Y\)不完全函数依赖于\(X\),则称Y对X部分函数依赖,记作\(X \stackrel{P}{\rightarrow} Y\),等价于在完全函数依赖中加入冗余属性使之变成部分函数依赖

  • 定义:在\(R(U)\)中,如果\(X \rightarrow Y (Y \nsubseteq X)\)\(Y \nrightarrow X\)\(Y \rightarrow Z\)\(Z \nsubseteq Y\),则称\(Z\)\(X\)传递函数依赖,记作\(X \stackrel{传递}{\rightarrow} Y\)

定义:设\(K\)\(R< U,F >\)中的属性或属性组合,若\(K \stackrel{F}{\rightarrow} U\),则\(K\)\(R\)候选码
如果\(K \stackrel{P}{\rightarrow} U\),则\(K\)称为超码候选码是最小的超码,即\(K\)的任何一个真子集都不是候选码
包含在任何一个候选码中的属性称为主属性,不包含在任何候选码中的属性称为非主属性,整个属性组都是码称为全码
定义:关系模式\(R\)中属性或属性组合\(X\)并非\(R\)的码,但\(X\)是另一个关系模式的码,则称\(X\)\(R\)外码


范式

关系数据库中的关系是要满足一定要求的,满足不同程度要求的为不同范式
各种范式之间的关系有:
\[5NF \subset 4NF \subset BCNF \subset 3NF \subset 2NF \subset 1NF\] 一个低一级范式的关系模式通过模式分解(schema decomposition)可以转化为若干高一级范式的关系模式的集合,这叫做规范化(normalization)

1NF

每个分量(属性)必须是不可分的数据项

2NF

相比于1NF,消除了非主属性对码的部分函数依赖
定义:设关系模式\(R< U,F >\), 若\(R \in 1NF\),且每个非主属性完全函数依赖于任何一个候选码,则\(R \in 2NF\)
一个关系模式R若不属于2NF,可能会产生:插入异常、删除异常、修改复杂

3NF

相比于2NF,消除了非主属性对码的传递函数依赖
定义:设关系模式\(R< U,F >\),若\(R \in 3NF\),则每个非主属性既不传递依赖于码,也不部分依赖于码,也就是说,若R属于3NF则必有R属于2NF

BCNF

相比于3NF,消除了主属性对码的部分和传递函数依赖
定义:设关系模式\(R< U,F >\),若每个决定因素都包含码(候选码),则\(R \in BCNF\)
满足BCNF的关系模式的性值:

  1. 所有非主属性对每一个码都是完全函数依赖
  2. 所有主属性对每一个不包含它的码也是完全函数依赖
  3. 没有任何属性完全函数依赖于非码的任何一组属性

多值依赖

&&&

4NF

相比于BCNF,消除了非平凡且非函数依赖的多值依赖

规范化小结

规范化的基本思想是逐步消除数据依赖中不合适的部分