针对一个具体问题,应该如何构造一个适合它的数据库模式,即应该构造几个关系,每个关系由哪些属性组成等。这是数据库设计的问题,确切地讲是关系数据库逻辑设计问题。

数据库逻辑设计的一个有力工具---关系数据库的规范化理论。

在之前基础篇-关系数据库我们已经知道,一个关系模式应当是一个五元组:R(U,D,DOM,F),关系名R是符号化元组语义,U为一组属性,D为U中属性所来自的域,DOM为属性到域的映射,F为属性组U上的一组数据依赖。由于D、DOM与模式设计关系不大,在本章把关系模式看作一个三元组:R<U,F>,当且仅当U上的一个关系r满足F是,r称为关系模式R<U,F>的一个关系。

数据依赖

数据依赖是一个关系内部属性与属性之间的一种约束关系。通过属性间值的相等与否体现出来的数据间相关联系。是现实世界属性间相互联系的抽象,是数据内在的性质,是语义的体现。其中最重要的是函数依赖(FD)和多值依赖(MVD)。

函数依赖

定义6.1:设R(U)是属性集U上的关系模式,X,Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数确定Y或Y函数依赖于X,记作X->Y。

函数依赖和别的数据依赖一样是语义范畴的概念,只能根据语义来确定一个函数依赖。

函数依赖不是指关系模式R的某个或某些关系满足的约束条件,而是指R的一切关系均要满足的约束条件。

术语和记号:

  • X→Y,但Y⊈X,则称X->Y是非平凡函数依赖
  • X→Y,但Y⊆X,则称X->Y是平凡函数依赖。对于任一关系模式,平凡函数依赖都必然是成立的,它不反映新的语义。若不特别声明,总是讨论非平凡函数依赖。
  • 若X→Y,则X称为这个函数依赖的决定属性组,也称为决定因素
  • 若X→Y,Y→X,则记作X←→Y。
  • 若Y不函数依赖于X,则记作X↛Y。

**定义6.2:**在R(U)中,如果X→Y并且对于X的任何一个真子集X’,都有X’↛Y,则称Y对X完全函数依赖;若X→Y,但Y不完全依赖于X,则称为Y对X部分函数依赖。

**定义6.3:**在R(U)中,如果X→Y(Y⊈X),Y↛X,Y→Z,Z⊈Y则称Z对X传递函数依赖。

**定义6.4:**设K为R<U,F>中的属性或属性组合,若U对K完全函数依赖,则K为R的候选码。

如果U部分函数依赖于K,则K称为超码。候选码是最小的超码,即K的任意一个真子集都不是候选码。

若候选码多于一个,则选定其中一个为主码。

包含在任何一个候选码中的属性称为主属性;不包含在任何候选码中的属性称为非主属性或非码属性。最简单的情况,单个属性是码;最极端的情况,整个属性组是码,称为全码。

**定义6.5:**关系模式R中属性或属性组X并非R的码,但X是另一个关系模式的码,则称X是R的外部码,也称外码。

范式

范式是符合某一种级别的关系模式的集合。

关系数据库中的关系是要满足一定要求的,满足不同程度要求的为不同范式。

范式的种类:1NF、2NF、3NF、BCNF、4NF、5NF。

各种范式之间的关系有1NF ⊃ 2NF ⊃ 3NF ⊃ BCNF ⊃ 4NF ⊃ 5NF。

范式之间关系.png

某一关系模式R为第n范式,可简记为R∈nNF。

一个低一级范式的关系模式通过模式分解可以转换为若干个高一级范式的关系模式的集合,这个过程叫规范化。

1NF

如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF。

第一范式是对关系模式的最起码要求,不满足第一范式的数据库模式不能称为关系数据库模式。

2NF

**定义6.6:**若R∈1NF,且每一个非主属性完全函数依赖于任何一个候选码,则R∈2NF。

一个关系模式R不属于2NF,就会产生以下几个问题:插入异常、删除异常、修改复杂、数据冗余。

3NF

**定义6.7:**设关系模式R<U,F> ∈ 1NF,若R中不存在这样的码X,属性组Y及非主属性Z(Z不⊇Y)使得X→Y,Y→Z成立,Y↛ X,则称R<U,F> ∈ 3NF。

由6.7可以证明,若R∈3NF,则每一个非主属性即不传递依赖于码,也不部分依赖于码。也就是说如果R∈3NF,则必有R∈2NF。

将一个2NF关系分解为多个3NF的关系后,并不能完全消除关系模式中的各种异常情况和数据冗余。

BCNF

BCNF比上述的3NF又进一步,通常认为是修正的第三范式,有时也称为扩充的第三范式。

**定义6.8:**关系模式R<U,F> ∈ 1NF,若X→Y且Y不⊆X时X比含有码,则R<U,F> ∈ BCNF。

也就是说,关系模式R<U,F>中,若每一个决定因素都包含码,则R<U,F> ∈ BCNF。

由BCNF的定义可以得到结论,一个满足BCNF的关系模式有:

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

如果一个关系数据库中的所有关系模式都属于BCNF,那么在函数依赖范畴内,它已经实现了模式的彻底分解,达到了最高的规范化程度,消除了操作异常等诸多问题。



参考文献:数据库系统概论-第5版[王珊,萨师煊]