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 titji=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 ABC 的关系模式 r ( A , B , C , D ) r(A,B,C,D) r(ABCD) 的一个关系实例。由图可知,对任意两个在属性集 { A , B } \{A,B\} {AB} 上取值相同的元组,它们在 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[AB]=t2[AB]=(a1b1)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\} α:{studentNocourseNo}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(ABCD),函数依赖集 F = r ( A B → C , B → D ) F=r(AB→C,B→D) F=r(ABCBD) 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(ABC),r2(R2)=r2(BD);此时 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)3NFr2(R2)3NF,候选码分别为AB、B。

例2: r ( R ) = r ( A , B , C ) r(R)=r(A,B,C) r(R)=r(ABC),函数依赖集 F = r ( A → B , B → C ) F=r(A→B,B→C) F=r(ABBC) r ( R ) 的 候 选 码 为 A , r ( R ) ∈ 2 N F r(R)的候选码为A, r(R) \in2NF r(R)Ar(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(AB)r2(R2)=r2(BC);此时 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)3NFr2(R2)3NF,候选码分别为A、B。

例3: r ( R ) = r ( A , B , C , D , E ) r(R)=r(A,B,C,D,E) r(R)=r(ABCDE),函数依赖集 F = r ( A B → C , B → D , C → E ) F=r(AB→C,B→D,C→E) F=r(ABCBDCE) 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(ABC)r2(R2)=r2(BD)r3(R3)=r3(CE)r1(R1)3NFr2(R2)3NFr3(R3)3NF,候选码分别为AB、B、C。

例4: r ( R ) = r ( A , B , C ) r(R)=r(A,B,C) r(R)=r(ABC),函数依赖集 F = r ( A B → C , C → A ) , r ( R ) F=r(AB→C,C→A),r(R) F=r(ABCCA)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)。至少满足下列条件之一:

  1. α → β \alpha \rightarrow \beta αβ 是平凡函数依赖(即 β ⊆ α \beta \subseteq \alpha βα);
  2. α \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条件有:

  • 所有非主属性都完全函数依赖于每一个候选键;
  • 所有主属性都完全函数依赖于每一个不包含它的候选键;
  • 没有任何属性完全函数依赖于非候选键的任何一组属性。
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐