关系数据库:函数依赖、3NF范式、BCNF范式
文章目录1 函数依赖1.1 函数依赖1.2 平凡与非平凡函数依赖1.3 完全函数依赖和部分函数依赖1.4 传递函数依赖2 范式2.1 第一范式(1NF)--- 码2.2 第二范式(2NF)--- 全部是码2.3 第三范式(3NF)--- 仅仅是码2.4 Boyce--Codd范式(BCNF)1 函数依赖函数依赖(functional dependency,FD)是一种完整性约束,是现实世界事物..
文章目录
1 函数依赖
函数依赖(functional dependency,FD)是一种完整性约束,是现实世界事物属性之间的一种制约关系,它广泛地存在于现实世界之中。
1.1 函数依赖
定义:设 r ( R ) r(R) r(R) 为关系模式, α ⊆ R , β ⊆ R \alpha \subseteq R,\beta \subseteq R α⊆R,β⊆R。对任意合法关系 r r r 及其中任两个元组 t i , t j , i ≠ j t_i,t_j,i \neq j ti,tj,i=j ,若 t i [ α ] = t j [ α ] t_i[\alpha]=t_j[\alpha] ti[α]=tj[α],则 t i [ β ] = t j [ β ] t_i[\beta]=t_j[\beta] ti[β]=tj[β],则称 α \alpha α 函数确定 β \beta β ,或 β \beta β 函数依赖于 α \alpha α,记作 α → β \alpha \rightarrow \beta α→β。
如图是满足满足函数依赖
A
B
→
C
AB→C
AB→C 的关系模式
r
(
A
,
B
,
C
,
D
)
r(A,B,C,D)
r(A,B,C,D) 的一个关系实例。由图可知,对任意两个在属性集
{
A
,
B
}
\{A,B\}
{A,B} 上取值相同的元组,它们在
C
C
C 上的取值也相同。例如:对于第1个和第2个元组:
t
1
[
A
,
B
]
=
t
2
[
A
,
B
]
=
(
a
1
,
b
1
)
,
且
t
1
[
C
]
=
t
2
C
]
=
c
1
)
t_1[A,B]=t_2[A,B]=(a1,b1),且t_1[C]=t_2C]=c1)
t1[A,B]=t2[A,B]=(a1,b1),且t1[C]=t2C]=c1)
1.2 平凡与非平凡函数依赖
定义:在关系模式
r
(
R
)
r(R)
r(R) 中,
α
⊆
R
,
β
⊆
R
\alpha \subseteq R,\beta \subseteq R
α⊆R,β⊆R。若
α
→
β
\alpha \rightarrow \beta
α→β 但
β
⊈
α
\beta \not\subseteq \alpha
β⊆α,则称
α
→
β
\alpha \rightarrow \beta
α→β 是非平凡函数依赖。否则,若
β
⊆
α
\beta \subseteq \alpha
β⊆α,则称
α
→
β
\alpha \rightarrow \beta
α→β 是平凡函数依赖。
1.3 完全函数依赖和部分函数依赖
定义:在关系模式 r ( R ) r(R) r(R) 中, α ⊆ R , β ⊆ R \alpha \subseteq R,\beta \subseteq R α⊆R,β⊆R。且 α → β \alpha \rightarrow \beta α→β 是非平凡函数依赖。若对任意 γ ⊂ α , γ → β \gamma \subset \alpha,\gamma \rightarrow \beta γ⊂α,γ→β 都不成立,则称 α → β \alpha \rightarrow \beta α→β 是完全函数依赖,简称完全依赖。否则,若存在非空的 γ ⊂ α 使 γ → β \gamma \subset \alpha使\gamma \rightarrow \beta γ⊂α使γ→β 成立 ,则称 α → β \alpha \rightarrow \beta α→β 是部分函数依赖简称部分依赖。
示例说明:
α
:
{
s
t
u
d
e
n
t
N
o
,
c
o
u
r
s
e
N
o
}
,
b
e
t
a
:
{
s
c
o
r
e
}
,
γ
:
{
s
t
u
d
e
n
t
N
o
}
、
{
c
o
u
r
s
e
N
o
}
\alpha:\{studentNo,courseNo\},beta:\{score\},\gamma:\{studentNo\}、\{courseNo\}
α:{studentNo,courseNo},beta:{score},γ:{studentNo}、{courseNo}
- 完全依赖
由学生学号、课程号可以唯一确定一门课程的分数:
{studentNo,courseNo}—>score;
由学生学号可以唯一确定一个学生姓名:
studentNo—>studentName;
由课程号可以唯一确定一个课程名:
courseNo—>courseName。
studentNo 、courseNo都是 {studentNo,courseNo}的子集,
但studentNo / courseNo 都不能唯一确定score。 - 部分依赖
{studentNo,courseNo}—>studentName;
{studentNo,courseNo}—>courseName;
studentNo 、courseNo都是 {studentNo,courseNo}的子集,
studentNo—>studentName;
courseNo—>courseName
1.4 传递函数依赖
定义:在关系模式 r ( R ) 中 , α ⊆ R , β ⊆ R , γ ⊆ R 。 若 α → β , β → γ r(R)中,\alpha \subseteq R,\beta \subseteq R,\gamma \subseteq R。若\alpha \rightarrow \beta,\beta \rightarrow \gamma r(R)中,α⊆R,β⊆R,γ⊆R。若α→β,β→γ 则必存在函数依赖 α → γ ; 若 α → β , β → γ 和 α → γ \alpha \rightarrow \gamma;若\alpha \rightarrow \beta,\beta \rightarrow \gamma和\alpha \rightarrow \gamma α→γ;若α→β,β→γ和α→γ都是非平凡函数依赖,且 β ↛ α \beta \nrightarrow \alpha β↛α,则称 α → γ \alpha \rightarrow \gamma α→γ 是传递函数依赖,简称传递依赖。
示例说明:
- 传递依赖
由学生学号可以唯一确定一个班级编号、班级名称、学院名称:
studentNo—>{classNo, className, institute};
由班级编号可以唯一确定一个班级名称、学院名称:
classNo—>{className, institute};
且由classNo不能唯一确定studentNo。
从上述两个函数依赖关系中可以得出:
studentNo—>{className, institute},故存在传递依赖。
2 范式(Normal Form)
基于函数依赖理论,关系模式可分成第一范式(1NF),第二范式(2NF),第三范式(3NF)和 Boyce-Codd 范式(BCNF)。这几种范式的要求一个比一个严格,它们之间的联系为BCNF ⊂ 3NF ⊂ 2NF ⊂ 1NF。即满足 BCNF 范式的关系一定满足3NF范式,满足3NF 范式的关系一定满足2NF范式,满足2NF范式的关系一定满足1NF范式。
1NF | 每个属性对应的域值都是不可分的 |
2NF | 所有非主属性都完全依赖于候选码 |
3NF | 非主属性必须完全依赖且直接依赖于候选码 (允许存在主属性对候选码的传递依赖和部分依赖) |
BCNF | 消除原关系中主属性对键的部分与传递依赖 |
2.1 第一范式(1NF)— 码
定义:如果一关系模式
r
(
R
)
r(R)
r(R) 的每个属性对应的域值都是不可分的,则称
r
(
R
)
r(R)
r(R) 属于第一范式,记为
r
(
R
)
∈
1
N
F
r(R)\in 1NF
r(R)∈1NF。
第一范式的目标是:将基本数据划分成称为实体集或表的逻辑单元,当设计好每个实体后,需要为其指定主码。
2.2 第二范式(2NF)— 全部是码
定义1:设有一关系模式 r ( R ) , α ⊆ R r(R),\alpha \subseteq R r(R),α⊆R。若 α \alpha α 包含在 r ( R ) r(R) r(R) 的某个候选码中,则 α \alpha α 称为主属性,否则 α \alpha α 为非主属性。
定义2:如果一关系模式 r ( R ) ∈ 1 N F r(R)\in 1NF r(R)∈1NF,且所有非主属性都完全函数依赖于 r ( R ) r(R) r(R) 的候选码,则称 r ( R ) r(R) r(R) 属于第二范式,记为 r ( R ) ∈ 2 N F r(R)\in 2NF r(R)∈2NF。
也就是说,对于满足第一范式(1NF)的关系模式,如果有复合候选码(即多个属性共同构成的候选码),那么非主属性不允许依赖于部分的候选码属性,必须依赖于全部的候选码属性—全部是码。
第二范式的目标是:将只部分依赖于候选码(即依赖于候选码的部分属性)的非主属性通过关系模式分解移到其他表中去。
2.3 第三范式(3NF)— 仅仅是码
定义:如果一关系模式 r ( R ) ∈ 2 N F r(R)\in 2NF r(R)∈2NF,且所有非主属性都直接函数依赖于 r ( R ) r(R) r(R) 的候选码(即不存在非主属性传递依赖于候选码),则称 r ( R ) r(R) r(R) 属于第三范式,记为 r ( R ) ∈ 3 N F r(R)\in 3NF r(R)∈3NF。
也就是说,对于满足第二范式(2NF)的关系模式,非主属性不能依赖于另一个(组)非主属性(这样就形成了对候选码的传递依赖),即非主属性只能直接依赖于候选码—仅仅是码。
第三范式的目标是:将不直接依赖于候选码(即传递依赖于候选码)的非主属性通过关系模式分解移到其他表中去。
总之,所有的非主属性应该直接依赖于(即不能存在传递依赖,这是3NF的要求)全部的候选码(即必须完全依赖,不能存在部分依赖,这是2NF的要求)。
例1:
r
(
R
)
=
r
(
A
,
B
,
C
,
D
)
r(R)=r(A,B,C,D)
r(R)=r(A,B,C,D),函数依赖集
F
=
r
(
A
B
→
C
,
B
→
D
)
F=r(AB→C,B→D)
F=r(AB→C,B→D),
r
(
R
)
r(R)
r(R) 的候选码为AB,则
r
(
R
)
∉
2
N
F
r(R) \not\in2NF
r(R)∈2NF。因为非主属性D依赖于候选码B(即部分依赖于AB)。
解决:
r
(
R
)
r(R)
r(R) 分解为
r
1
(
R
1
)
=
r
1
(
A
,
B
,
C
)
,
r
2
(
R
2
)
=
r
2
(
B
,
D
)
r_1(R_1)=r_1(A,B,C),r_2(R_2)=r_2(B,D)
r1(R1)=r1(A,B,C),r2(R2)=r2(B,D);此时
r
1
(
R
1
)
∈
3
N
F
、
r
2
(
R
2
)
∈
3
N
F
r_1(R_1) \in3NF、r_2(R_2) \in3NF
r1(R1)∈3NF、r2(R2)∈3NF,候选码分别为AB、B。
例2:
r
(
R
)
=
r
(
A
,
B
,
C
)
r(R)=r(A,B,C)
r(R)=r(A,B,C),函数依赖集
F
=
r
(
A
→
B
,
B
→
C
)
F=r(A→B,B→C)
F=r(A→B,B→C),
r
(
R
)
的
候
选
码
为
A
,
r
(
R
)
∈
2
N
F
r(R)的候选码为A, r(R) \in2NF
r(R)的候选码为A,r(R)∈2NF,但
r
(
R
)
∉
3
N
F
r(R) \not\in3NF
r(R)∈3NF。因为C依赖于非主属性B。
解决:
r
(
R
)
分
解
为
r
1
(
R
1
)
=
r
1
(
A
,
B
)
,
r
2
(
R
2
)
=
r
2
(
B
,
C
)
r(R) 分解为 r_1(R_1)=r_1(A,B),r_2(R_2)=r_2(B,C)
r(R)分解为r1(R1)=r1(A,B),r2(R2)=r2(B,C);此时
r
1
(
R
1
)
∈
3
N
F
、
r
2
(
R
2
)
∈
3
N
F
r_1(R_1)\in 3NF、r_2(R_2)\in 3NF
r1(R1)∈3NF、r2(R2)∈3NF,候选码分别为A、B。
例3:
r
(
R
)
=
r
(
A
,
B
,
C
,
D
,
E
)
r(R)=r(A,B,C,D,E)
r(R)=r(A,B,C,D,E),函数依赖集
F
=
r
(
A
B
→
C
,
B
→
D
,
C
→
E
)
F=r(AB→C,B→D,C→E)
F=r(AB→C,B→D,C→E),
r
(
R
)
r(R)
r(R) 的候选码为AB,则
r
(
R
)
∉
2
N
F
r(R) \not\in2NF
r(R)∈2NF。因为非主属性D只依赖于候选码B(即部分依赖于AB)。
解决:
r
(
R
)
分
解
为
r
1
(
R
1
)
=
r
1
(
A
,
B
,
C
)
,
r
2
(
R
2
)
=
r
2
(
B
,
D
)
,
r
3
(
R
3
)
=
r
3
(
C
,
E
)
;
此
时
r
1
(
R
1
)
∈
3
N
F
、
r
2
(
R
2
)
∈
3
N
F
、
r
3
(
R
3
)
∈
3
N
F
r(R)分解为 r_1(R_1)=r_1(A,B,C),r_2(R_2)=r_2(B,D),r_3(R_3)=r_3(C,E);此时r_1(R_1)\in 3NF、r_2(R_2) \in3NF、r_3(R_3) \in3NF
r(R)分解为r1(R1)=r1(A,B,C),r2(R2)=r2(B,D),r3(R3)=r3(C,E);此时r1(R1)∈3NF、r2(R2)∈3NF、r3(R3)∈3NF,候选码分别为AB、B、C。
例4: r ( R ) = r ( A , B , C ) r(R)=r(A,B,C) r(R)=r(A,B,C),函数依赖集 F = r ( A B → C , C → A ) , r ( R ) F=r(AB→C,C→A),r(R) F=r(AB→C,C→A),r(R)的候选码为AB或BC, r ( R ) ∈ 3 N F r(R) \in3NF r(R)∈3NF。因为关系模式 r ( R ) r(R) r(R) 中没有非主属性,也就不可能有非主属性对候选码的部分/传递依赖。
总结:
1NF:每个属性对应的域值都是不可分的
2NF:非主属性都完全依赖于候选码
3NF:非主属性必须完全依赖且直接依赖于候选码
2.4 Boyce–Codd范式(BCNF)
BCNF范式:能排除所有部分依赖和传递依赖的BCNF范式。
定义:给定关系模式 r ( R ) ∈ 1 N F r(R) \in 1NF r(R)∈1NF,函数依赖集 F,若 F + F^+ F+ (表示F的闭包)中的所有函数依赖 α → β ( α ⊆ R , β ⊆ R ) \alpha \rightarrow \beta(\alpha \subseteq R,\beta \subseteq R) α→β(α⊆R,β⊆R)。至少满足下列条件之一:
- α → β \alpha \rightarrow \beta α→β 是平凡函数依赖(即 β ⊆ α \beta \subseteq \alpha β⊆α);
- α \alpha α 是 r ( R ) r(R) r(R) 的一个超码(即 α \alpha α中包含 R R R 的候选码)
则称 r ( R ) r(R) r(R)属于Boyce-Codd范式,记为 r ( R ) ∈ B C N F r(R) \in BCNF r(R)∈BCNF。
换句话说,在关系模式 r ( R ) r(R) r(R) 中,如果 F + F^+ F+ 中的每一个非平凡函数依赖的决定属性集 α \alpha α 都包含候选码,则 r ( R ) ∈ B C N F r(R) \in BCNF r(R)∈BCNF。必须说明的是,为确定 r ( R ) r(R) r(R) 是否满足BCNF.必须考虑 F + F^+ F+ 而不是 F F F 中的每个函数依赖。
满足BCNF条件有:
- 所有非主属性都完全函数依赖于每一个候选键;
- 所有主属性都完全函数依赖于每一个不包含它的候选键;
- 没有任何属性完全函数依赖于非候选键的任何一组属性。
更多推荐
所有评论(0)