通常按属性间依赖情况来区分关系规范化程度为1NF、2NF、3NF和4NF等。
1 函数依赖
1.1 函数依赖的定义
设 R ( U ) R(U) R(U)是属性集 U U U上的关系模式, X X X, Y Y Y是 U U U的子集,若对于 R ( U ) R(U) R(U)的任意一个可能的关系 r r r, r r r中不可能存在两个元组在 X X X上的属性值相等,而在 Y Y Y上的属性值不等,则称 X X X函数确定 Y Y Y或 Y Y Y函数依赖 X X X,记作 X → Y X{ \rarr}Y X→Y。
1.2 确定函数依赖
根据现实世界的语义来确定函数依赖。
1.3 函数依赖的其他术语
-
X
→
Y
,
X{ \rarr}Y,
X→Y,但是
Y
∉
X
,
Y{\notin}X,
Y∈/X,则称
X
→
Y
X{ \rarr}Y
X→Y是非平凡的函数依赖。
示例:在关系SC(Sno,Cno,Grage)中,(Sno,Cno)->Grage -
X
→
Y
,
X{ \rarr}Y,
X→Y,但是
Y
∈
X
,
Y{\in}X,
Y∈X,则称
X
→
Y
X{ \rarr}Y
X→Y是平凡的函数依赖。
示例:在关系SC(Sno,Cno,Grage)中,(Sno,Cno)->Sno - X → Y , X{ \rarr}Y, X→Y, Y → X , Y{ \rarr}X, Y→X,则记作 X ↔ Y X{ \leftrightarrow}Y X↔Y
- 在
R
(
U
)
R(U)
R(U)中,如果
X
→
Y
,
X{\rarr}Y,
X→Y,并且对于
X
X
X的任何一个真子集
X
′
X^{\prime}
X′,都有
X
′
↛
Y
X^{\prime}{\nrightarrow}Y
X′↛Y,则称
Y
Y
Y对
X
X
X完全函数依赖,记作
X
→
F
Y
X\xrightarrow[]{F}Y
XFY,若
Y
Y
Y不完全依赖于
X
X
X,则称
Y
Y
Y对
X
X
X部分函数依赖。
示例:在关系SC(Sno,Cno,Grage)中,(Sno,Cno) → F {\xrightarrow[]{F}} FGrage是完全函数依赖。 - 在
R
(
U
)
R(U)
R(U)中,如果
X
→
Y
(
Y
∉
X
)
,
Y
↛
X
,
Y
→
Z
,
Z
∉
Y
X{\rarr}Y(Y{\notin}X),Y{\nrightarrow}X,Y{\rarr}Z,Z{\notin}Y
X→Y(Y∈/X),Y↛X,Y→Z,Z∈/Y,则称
Z
Z
Z对
X
X
X传递函数依赖。
示例: S n o → S d e p t , S d e p t → M n a m e Sno{\rarr}Sdept,Sdept{\rarr}Mname Sno→Sdept,Sdept→Mname成立,所以 S n o → 传 递 M n a m e Sno\xrightarrow[]{传递}Mname Sno传递Mname
2 第一范式(1NF)
定义:每个分量必须是不可分的数据项。
注:关系模式至少要满足1NF。
3 第二范式(2NF)
定义:若 R ∈ 1 N F R{\in}1NF R∈1NF,且每个非主属性完全函数依赖于任何一个候选码,则 R ∈ 2 N F R{\in}2NF R∈2NF。
注:如果不满足第二范式可能会引发插入、删除、修改等异常。
4 第三范式(3NF)
定义:设关系模式 R < U , F > ∈ 1 N F R<U,F>{\in}1NF R<U,F>∈1NF,若 R R R中不存在这样的码 X X X,属性组 Y Y Y及非主属性 Z ( Z 不 包 含 于 Y ) Z(Z不包含于Y) Z(Z不包含于Y)使得 X → Y , Y → Z X{\rarr}Y,Y{\rarr}Z X→Y,Y→Z成立, Y ↛ X Y{\nrightarrow}X Y↛X,则称 R < U , F > ∈ 3 N F R<U,F>{\in}3NF R<U,F>∈3NF。
注:3NF即为不能存在传递函数依赖。
5 BCNF
定义:关系模式 R < U , F > ∈ 1 N F R<U,F>{\in}1NF R<U,F>∈1NF,若 X → Y ( Y 不 包 含 于 X ) X{\rarr}Y(Y不包含于X) X→Y(Y不包含于X)时 X X X必含有码,则称 R < U , F > ∈ B C N F R<U,F>{\in}BCNF R<U,F>∈BCNF。
注:
所有非主属性对每个码都是完全函数依赖。
所有主属性对每个不包含他的码也是完全函数依赖。
没有任何属性完全依赖于非码的任何一组属性。