关系数据库:函数依赖、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)