关系数据库逻辑设计
- 针对具体问题,如何构造一个适合于它的数据模式
- 数据库逻辑设计的工具──关系数据库的规范化理论
数据依赖
- 是一个关系内部属性与属性之间的一种约束关系。
- 是现实世界属性间相互联系的抽象
- 是数据内在的性质
- 是语义的体现
“好”的模式:
不会发生插入异常、删除异常、更新异常,数据冗余应尽可能少。
原因:由存在于模式中的某些数据依赖引起的
解决方法:通过分解关系模式来消除其中不合适的数据依赖。
规范化
函数依赖
定义:设R(U)是一个属性集U上的关系模式,X和Y是U的子集。
若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称 “X函数确定Y” 或 “Y函数依赖于X”,记作X→Y。
X称为这个函数依赖的决定属性集(Determinant)。
Y=f(x)
平凡函数依赖与非平凡函数依赖
对于任一关系模式,平凡函数依赖都是必然成立的,它不反映新的语义,因此若不特别声明, 我们总是讨论非平凡函数依赖。
完全函数依赖与部分函数依赖
传递函数依赖
码
主属性与非主属性:
- 包含在任何一个候选码中的属性 ,称为主属性(Prime attribute)
- 不包含在任何码中的属性称为非主属性(Nonprime attribute)或非码属性(Non-key attribute)
全码:
- 整个属性组是码,称为全码(All-key)
外部码:
关系模式 R 中属性或属性组X 并非 R的码,但 X 是另一个关系模式的码,则称 X 是R 的外部码(Foreign key)也称外码。
如在SC(Sno,Cno,Grade)中,Sno不是码,但Sno是关系模式S(Sno,Sdept,Sage)的码,则Sno是关系模式SC的外部码
范式
范式是符合某一种级别的关系模式的集合。
关系数据库中的关系必须满足一定的要求。满足不同程度要求的为不同范式。
范式的种类:
某一关系模式R为第n范式,可简记为R∈nNF。
一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化。
-
1NF
如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF。
第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库。
但是满足第一范式的关系模式并不一定是一个好的关系模式。 -
2NF
定义6.6 若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于R的码,则R∈2NF。
消除非主属性对码的部分函数依赖。 -
3NF
每一个非主属性既不部分依赖于码也不传递依赖于码。
如果R∈3NF,且R只有一个候选码 -
BC范式(BCNF)
多值依赖
多值依赖的3个要点:
- 1)Z = U-X-Y
- 2)Y的值决定于X上的值
- 3)Y的值与Z值无关
平凡的多值依赖:
多值依赖的性质:
-
(1)多值依赖具有对称性
若X→→Y,则X→→Z,其中Z=U-X-Y
多值依赖的对称性可以用完全二分图直观地表示出来。 -
(2)多值依赖具有传递性
若X→→Y,Y→→Z, 则X→→Z -Y -
( 3)函数依赖是多值依赖的特殊情况。
若X→Y,则X→→Y。
4NF
注意:
- 一个全是主属性的关系模式一定可以达到3NF。
- 一个全码的关系模式一定可以达到BCNF。
- 一个二目关系模式一定可以达到4NF。
- 函数依赖和多值依赖是两种重要的数据依赖。在函数依赖的范畴内, BCNF是最高级别的范式。如果考虑多值依赖, 则4NF是最高的范式级别。
- 除FD和MVD外,还有其他数据依赖,如连接依赖,在连接依赖的概念上还可以定义5NF的范式级别。
关系模式的规范化过程是通过对关系模式的投影分解来实现的, 把低一级的关系模式分解为若干高一级的关系模式, 分解不是唯一的。
并不是规范化程度越高越好:
- 规范化程度高, 可解决更新异常和冗余大的问题, 但会失去检索查询方便快速的优点, 增加(自然)连接运算的开销。
- 必须结合应用环境和具体情况合理选择DB模式, 经常用于检索查询的系统, 宁肯规范化程度低些。