函数依赖

设R(U)是属性集U上的关系式,X,Y是U的子集。

若对于 R(U) 的任意一个可能的关系 r,r中不可能存在两个元组在 X 上的属性值相等,而在 Y 的属性值上不等。

则称 X 函数确定 Y , 或 Y 函数依赖于 X ,记作 :

$$
X \rightarrow Y
$$

平凡函数依赖

$$
X \rightarrow Y , Y \subseteq X
$$

即Y函数依赖于X,并且Y含于X。

非平凡函数依赖

$$
X \rightarrow Y , Y \not\subseteq X
$$

即Y函数依赖于X,但是Y不含于X。

完全函数依赖

在R(U)中,如果
$$
X \rightarrow Y ,且对于X的任何一个真子集X’,都有X’ \not\rightarrow Y
$$
则称Y对于X完全函数依赖,记作:
$$
X \xrightarrow F Y
$$

部分函数依赖

在R(U)中,如果
$$
X \rightarrow Y ,但是Y不完全函数依赖于X
$$
则称Y对X的部分函数依赖。

候选码

设K为R<U,F>中的属性或属性组合,U完全函数依赖于K,即
$$
K \xrightarrow F U
$$
则K为R的候选码。

超码

如果U函数依赖于K,即
$$
K \rightarrow U
$$
则称K为R的超码。

主码

若候选码有多个,选定一个为主码。

主属性

包含在任何一个候选码中的属性称为主属性。

不包含在任何候选码中的属性为非主属性

第一范式

认为数据库表中的字段不可以再进行分解。

这个需要根据具体情况具体分析,有些情况下可以认为字段可以拆分,有些情况下认为字段不可以拆分。

第二范式

满足第一范式的要求,并且数据库表中每一个非主属性完全函数依赖于任何一个候选码。

第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关。

候选码对应的属性组的任何真子集都不能构成候选码。

不满足第二范式可能会出现:插入异常、删除异常和修改异常。

例如表: 学号、课程号、姓名、学分 就不符合第二范式,因为学分依赖于学号和课程号,但是姓名只依赖于学号。

第三范式

关系模式满足第一范式要求,若R中不存在这样的码X,
$$
属性组Y及非主属性Z ,满足 Z \not\subseteq Y
$$
使得
$$
X \rightarrow Y, Y \rightarrow Z (Y \not\rightarrow X)
$$
成立,则称R满足第三范式。

即,若R满足第三范式,则每一个非主属性既不传递依赖于码,也不部分依赖于码。

第三范式确保了每列都和主键列直接相关,而不是间接相关。

不满足第三范式可能会出现数据冗余和更新异常。

例如表: 学号, 姓名, 年龄, 学院名称, 学院电话 不符合第三范式,因为存在传递依赖学号→学生→学院。

参考资料:

https://www.cnblogs.com/linjiqin/archive/2012/04/01/2428695.html

https://www.huaweicloud.com/articles/c1c4f2d4c72b61eab44114ae8286835f.html

数据库系统概论(第5版)高等教育出版社