第 4 章 关系数据理论

Post on 21-Jan-2016

90 views 0 download

description

第 4 章 关系数据理论. 4.1 函数依赖. 4.2 关系模式的规范化. 4.3 数据依赖公理. 4.4 关系模式的分解. 本章小结. 4.1 函数依赖. 一、问题 —— 如何构造一个关系模式 例: 假设有学生关系模式. S(S#,SNAME,CLASS,C#,TNAME,TAGE,ADDRESS,GRADE). 其中, S# — 学号、 SNAME — 学生姓名、 CLASS — 班级、 C# — 课程号、 TNAME — 教师姓名、 TAGE — 教师年龄、 ADDRESS — 教师地址、 GRADE — 成绩。. - PowerPoint PPT Presentation

Transcript of 第 4 章 关系数据理论

武汉大学计算机学院数据库课程组

4.1 4.1 函数依赖函数依赖

4.2 4.2 关系模式的规范化关系模式的规范化

4.3 4.3 数据依赖公理数据依赖公理

4.4 4.4 关系模式的分解关系模式的分解

第 4 章 关系数据理论关系数据理论

本章小结

武汉大学计算机学院数据库课程组

4.1 4.1 函数依赖函数依赖一、问题——如何构造一个关系模式 例:假设有学生关系模式

其中, S#— 学号、 SNAME— 学生姓名、 CLASS— 班级、 C#— 课程号、 TNAME— 教师姓名、 TAGE— 教师年龄、 ADDRESS— 教师地址、 GRADE— 成绩。

S(S#,SNAME,CLASS,C#,TNAME,TAGE,ADDRESS,GRADE)

关系 S 存在以下问题:1 .数据冗余度高。SNAME 、 CLASS 、 TNAME 、 TAGE 、 ADDRESS 重复存储多次。

武汉大学计算机学院数据库课程组

4.14.1 函数依赖函数依赖 2 .数据修改复杂。

3 .插入异常。

插入异常是指应该插入到数据库中的数据不能执行插入操作的情形。

关系 S 的主键:( S# , C# )从在 S# 、 C# 、和 (S#,c#) 上出现 NULL 值去分析。

注意:当一个元组在主键的属性上部分或全部为空时,该元组不能插入到关系中。

武汉大学计算机学院数据库课程组

4.14.1 函数依赖函数依赖4 .删除异常。 删除异常是指不应该删去的数据被删去的情形。 例如:选修某门课的所有学生都退选时,删除相关元组,

会丢失该课程老师的信息。 解决:关系模式分解(关系规范化) 分解为 ST(S# , SNAME , CLASS) CT(C#,TNAME) TA(TNAME,TAGE,ADDRESS) SC(S#,C#,GRADE)

武汉大学计算机学院数据库课程组

4.14.1 函数依赖函数依赖二、函数依赖 functional dependency, abbr. FD

设: R ( A1 , A2 ,… An)=R( U ) X , Y , Z 为 U 的不同子集

定义 4.1 : ① 函数依赖 是完整性约束的一种,它推广了关键词的概念。

If t1.X=t2.X, then t1.Y=t2.Y ② 函数依赖:若 R 的任意关系有:对 X 中的每个属性值,在

Y 中都有惟一的值与之对应,则称 Y 函数依赖于 X ,记作 XY 。

属性全集

武汉大学计算机学院数据库课程组

4.14.1 函数依赖函数依赖 例:指出下列关系 R 中的函数依赖。

A B C D

a1 b1 c1 d1

a1 b1 c1 d2

a1 b2 c2 d1

a2 b1 c3 d1

FD: AB->C 、 A→C 、 C→A 、 AB→D ? Insert into R values(a1, b1, c2, d1) FD = key constraint ?

武汉大学计算机学院数据库课程组

4.14.1 函数依赖函数依赖函数依赖与属性间的关系有: 若 X , Y 是 1 — 1 关系, 则存在 XY 或 Y X 。如学号与借书证号 若 X , Y 是 m — 1 关系, 则存在 XY 但 Y+> X 。如学号与姓名 若 X , Y 是 m — n 关系, 则 X , Y 间不存在函数依赖关系。如姓名与课程

CF: 实体间的联系NOTE: 函数依赖的方向性

武汉大学计算机学院数据库课程组

4.14.1 函数依赖函数依赖 例 试指出学生关系 S(S# , SNAME , CLASS , C# , TNAME ,

TAGE , ADDRESS , GRADE) 中存在的函数依赖关系。S#→SNAME (每个学号只能有一个学生姓名)S#→CLASS (每个学号只能有一个班级)C#→TNAME (设每门课程只有一个教师任教,而一个教师可教多

门课程,见 CT 表)TNAME→TAGE (每个教师只能有一个年龄)TNAME→ADDRESS (每个教师只能有一个地址)(S# , C#)→GRADE (每个学生学习一门课只能有一个成绩)(S# , C#)→SNAME 、 (S# , C#)→CLASS 、 (S# , C#)→C# 、(S# , C#)→TNAME 、 (S# , C#)→TAGE 、 (S# , C#)→ADDRESS

武汉大学计算机学院数据库课程组

4.14.1 函数依赖函数依赖三、函数依赖的分类 XY ,但 Y 不包含于 X 则称 X 是非平凡的函数依赖。 XY ,但 Y ⊆ X 则称 X 是平凡的函数依赖。 若 XY ,则 X 叫做决定因素。 若 XY , Y X ,则记作 : X<— —>Y 。 定义 4.2 :在 R( U) 中, X, Y, Z 为 U 的不同子集。 完全函数依赖 : 是指 XY ,且对任何 X 的真子集 X’ , 都有 X’+>Y ,记作: X F >

Y 。 部分函数依赖 : 是指 XY ,且存在 X 的真子集 X’ , 有 X’->Y , 记作: X P >

Y 。

定义 4.3 :在 R( U ) 中 传递函数依赖:是指若 XY (Y 不包含于 X) , Y +> X , 而 Y Z 。记作: X T > Z 。

武汉大学计算机学院数据库课程组

4.14.1 函数依赖函数依赖 左部为单属性的函数依赖一定是完全函数依赖。 左部为多属性的函数依赖,如何判断其是否为完全函数依赖? 方法:取真子集,看其能否决定右部属性。

例:试指出学生关系 S 中存在的完全函数依赖和部分函数依赖。 S#→SNAME , S#→CLASS , TNAME→TAGE , TNAME→ADDRESS , C#→TNAME 都是完全函数依赖。 (S# , C#)→GRADE 是一个完全函数依赖,因为 S#+>GRADE ,

C#+>GRADE 。

武汉大学计算机学院数据库课程组

4.14.1 函数依赖函数依赖

例:试指出学生关系 S 中存在的传递函数依赖。

解:因为 C#→TNAME , TNAME+>C# , TNAME→TAGE ,所以C#→TAGE 是一个传递函数依赖。类似地, C#→ADDRESS也是一个传递函数依赖。

(S# , C#)→SNAME , (S# , C#)→CLASS ,

(S# , C#)→TNAME , (S# , C#)→TAGE ,

(S# , C#)→ADDRESS 都是部分函数依赖,因为 S#→SNAME , S#→CLASS , C#→TNAME , C#→TAGE , C#→ADDRESS 。

武汉大学计算机学院数据库课程组

4.14.1 函数依赖函数依赖

四、候选键 用函数依赖的概念来定义键。定义 4.4 : 设 X 为 R<U , F> 中的属性或属

性组合,若 X F > U 则 X 为 R

的候选键。 说明: X F >

U X -> U X 能决定整个元组 X’+> U X 中无多余的属性

术语: 主键 主属性 : 侯选键中的属性 非主属性 全键:整个属性组为键 例: R(顾客,商品,日期 )

武汉大学计算机学院数据库课程组

4.14.1 函数依赖函数依赖 例:试指出下列关系 R 中的侯选键、主属性和非主属性。

A D E

a1

d1 e2

a2

d6 e2

a3

d4 e3

a4

d4 e4解:关系 R 的侯选键为: A , (D,E)

关系 R 的主属性为: A , D , E

关系 R 的非主属性:无

函数依赖判断: A->D? D->A? … AD->E?…

候选键判断 : A->ADE?… AD->ADE?…

武汉大学计算机学院数据库课程组

4.14.1 函数依赖函数依赖

例 1. R(A, B, C, D) , F={A->B, A->C, AB->D}解:由 AB->A(自反律 ) 和 A->C(已知 ) 得: AB->C( 传递律 ) 又因为 AB->A (自反律 ) , AB->B (自反律 ) 和 AB->D (已知 )

得: AB->ABCD 。 AB 是 R 的唯一候选键,同时也是 R 的主键。

武汉大学计算机学院数据库课程组

4.14.1 函数依赖函数依赖

例 2. R(A, B, C, D) , F={A->B, A->C, A->D, AB->D}解:由 A->A(自反律 ) 和 A->B, A->C, A->D(已知 ) 得: A-> ABCD 可知 A 是 R 的候选键 AB->ABCD ,但由于存在 A-> ABCD ,则 AB 对 ABCD 是部分函

数依赖,因此 AB 不能成为候选键。 A 是 R 的唯一候选键, A 是主键。

武汉大学计算机学院数据库课程组

4.2 4.2 关系模式的规范化关系模式的规范化一、关系与范式 关系的规范化是将一个低级范式的关系模式,通过关系

模式的分解转换为若干个高级范式的过程。

关系模式分解的目的:去冗余、满足约束。

关系模式的冗余性问题。例 R(A,B,C) ,无任何约束可导致冗余,若规定 FD:A->B ,则冗余可利用 FD预测到。

约束条件通过函数的多值依赖和连接依赖及范式完成。

武汉大学计算机学院数据库课程组

4.2 4.2 关系模式的规范化关系模式的规范化二、第一范式: 1NF定义 4.5: 若 R 的每个分量都是不可分的数据项,则 R∈1NF 。 从型上看:不存在嵌套结构 从值上看,不存在重复组 1NF 是关系模式的最低要求。

例:学生关系 S(S# , SNAME , CLASS , C# , TNAME , TAGE , ADDRESS , GRADE) 是 1NF 关系,但它存在数据冗余,插入异常和删除异常等问题。

武汉大学计算机学院数据库课程组

4.2 4.2 关系模式的规范化关系模式的规范化三、第二范式: 2NF 定义 4.6 若 R∈1NF ,且 R 中的每一个非主属性都完全

函数依赖于 R 的任一候选键,则 R∈2NF 。 例:学生关系 S(S# , SNAME , CLASS , C# , TNA

ME , TAGE , ADDRESS , GRADE),判断 R 是否为2NF?

侯选键为 (S# , C#) ,非主属性有: SNAME , CLASS , TNAME , TAGE , ADDRESS , GRADE

(S# , C#)- >SNAME , S# - > SNAME (S# , C#) P >SNAME S2NF( 每一个非主属性 !) 。

武汉大学计算机学院数据库课程组

4.2 4.2 关系模式的规范化关系模式的规范化 分解为 2NF 的方法:破坏部分依赖的条件。 将满足部分函数依赖和满足完全函数依赖的属性分解到

不同的关系中。

对上例,考察非主属性和侯选键之间的函数依赖关系:(S# , C#) P >SNAME , (S# , C#) P >CLASS ,(S# , C#) P >TNAME , (S# , C#) P >TAGE ,(S# , C#) P >ADDRESS , (S# , C#) F >GRADE 区分出完全依赖和部分依赖,若是部分依赖,标记出其

中的主属性。

武汉大学计算机学院数据库课程组

4.2 4.2 关系模式的规范化关系模式的规范化 关系 S 分解为三个关系:ST(S# , SNAME , CLASS) (只依赖 S# 的属性分解到

一个子模式中)CTA(C# , TNAME , TAGE , ADDRESS) (只依赖 C#

的属性分解到另一个子模式中)SC(S# , C# , GRADE) (完全函数依赖于候选键的属

性分解到第三个子模式中)分解后,关系 ST 、 CTA 和 SC 都为 2NF 。结论 1 :若关系 R 的侯选键是单属性的,则 R必定是 2N

F 。

武汉大学计算机学院数据库课程组

4.2 4.2 关系模式的规范化关系模式的规范化 达到 2NF 的关系仍然可能存在问题。例如,在关系 CTA 中还存在以下问题:( 1 ) 数据冗余。一个教师承担多门课程时,教师的姓

名、年龄、地址要重复存储。( 2 ) 修改复杂。一个教师更换地址时,必须修改相关

的多个元组。( 3 ) 插入异常。一个新教师报到,需将其有关数据插

入到 CTA 关系中,但该教师暂时还未承担任何教学任务,则因缺键 C# 值而不能进行插入操作。

( 4 ) 删除异常。删除某门课程时,会丢失该课程任课教师的姓名、年龄和地址信息。

武汉大学计算机学院数据库课程组

4.2 4.2 关系模式的规范化关系模式的规范化四、第三范式: 3NF定义 4.7 如果关系 R 的任意一个非主属性都不传递函数依赖

于它的任意一个候选键,则 R∈3NF 。 关系 CTA(C# , TNAME , TAGE , ADDRESS) 是 2NF ,

但不是 3NF 。 候选键: C# ,非主属性: TNAME 、 TAGE 、 ADDRESS 。 由于 C#→TNAME , TNAME+>C# , TNAME→TAGE ,所

以 C# T >TAGE ,同样有 C# T >ADDRESS ,即存在非主

属性对候选键的传递函数依赖。

关系模式 R ( A , B , C , D ),键为 AB ,给出它的一个函数依赖集,使得 R 属于 2NF 而不属于 3NF

武汉大学计算机学院数据库课程组

4.2 4.2 关系模式的规范化关系模式的规范化 分解为 3NF 的方法:破坏传递依赖的条件。 将涉及传递函数依赖中的两个依赖中的属性分解到不同的关系中。

例: CTA 中,两个传递依赖 C# T >TAGE , C# T >ADDRESS

C#→TNAME , TNAME+>C# , TNAME→TAGE 。 C#→TNAME , TNAME+>C# , TNAME→ADDRESS 。 将 CTA 分解为: CT(C# , TNAME) TA(TNAME , TAGE , ADDRESS) 则关系 CT 和 TA 都是 3NF ,关系 CTA 中存在的问题得到了解决。

武汉大学计算机学院数据库课程组

4.2 4.2 关系模式的规范化关系模式的规范化 定理 4.1 一个 3NF 的关系必定是 2NF 。( 3NF 传递函数依赖, 2NF 完全函数依赖。) 证明:用反证法。设 R∈3NF ,但 R2NF ,则 R 中必有非主属性 A 、侯选键 X 和 X 的真子集 X‘存在,使得 X’→A 。 X’ 是侯选键 X 的真子集,有 X-X‘≠ф; A 是非主属性,

A-X≠ф, A-X‘≠ф,这样 A 、 X 、 X‘是 U 的不同子集。

X’ 是侯选键 X 的真子集,则有 X→X’ 且 X’+>X ,联合反证假设 X’→A 可知存在传递依赖( X→X’ , X’+>X , X’→A )

R 不是 3NF ,与题设矛盾。

武汉大学计算机学院数据库课程组

4.2 4.2 关系模式的规范化关系模式的规范化 通过转为 2NF消除了部分依赖,通过转为 3NF消除了

传递依赖,问题:达到 3NF 的关系是否仍然存在问题?

例:每一教师只教一门课。每门课由若干教师教,某一学生选定某门课,就确定了一个固定的教师。某个学生选修某个教师的课就确定了所选课的名称 :

武汉大学计算机学院数据库课程组

4.2 4.2 关系模式的规范化关系模式的规范化

解:关系 SCT 的侯选键: (S# , CNAME) 和 (S# , TNAME) 非主属性:无 ( SCT至少是一个 3NF 关系 ) 结论 2 :若关系 R 的所有属性都是主属性,则 R必定是 3NF 。

S# CNAME

TNAME

s1 英语 王平 s1 数学 刘红 s2 物理 高志强 s2 英语 陈进 s3 英语 王平

候选键判断 :

S#->S# CNAME TNAME..

取左部的相同值,判断右部。

武汉大学计算机学院数据库课程组

4.2 4.2 关系模式的规范化关系模式的规范化在 3NF 关系 SCT 中存在: 插入异常。例如,一个新课程和任课教师的数据,在没

有学生选课时不能插入数据库。 删除异常。例如,删除某门课的所有选课记录,会丢失

课程与教师的数据。

达到 3NF 的关系仍然可能存在问题。

武汉大学计算机学院数据库课程组

4.2 4.2 关系模式的规范化关系模式的规范化五、 BCNF 定义 4.8 关系模式 R<U , F>∈1NF 。若函数依赖集合 F 中的所有函数依赖 X→Y ( Y 不包含于 X )的左部都包含 R 的任一侯选键,则 R∈BCNF 。 换言之, BCNF 中的所有依赖的左部都必须包含候选键。

例:关系 SCT 是否 BCNF? 因为 TNAME→CNAME ,其左部未包含该关系的任一侯选键,所以它不是 BCNF 。

解决: BCNF 分解。

武汉大学计算机学院数据库课程组

4.2 4.2 关系模式的规范化关系模式的规范化 分解为 BCNF 的方法: 消除不包含关系。 1. 假设 R(U) 不是 BCNF, X 是 R 的属性子集, A 是 R 的

单个属性, X->A 是导致违反 BCNF 的函数依赖,则将R 分解为 R-A 以及 XA 。

2. 若 R-A 以及 XA 仍然不是 BCNF ,则在 R-A 以及 XA递归地执行上述分解。

例 SCT : (S# , CNAME , TNAME) , FD: TNAME→CNAME 。

可分解为 SC(S# , TNAME) 和 CT(CNAME , TNAME) ,它们都是 BCNF 。

武汉大学计算机学院数据库课程组

4.2 4.2 关系模式的规范化关系模式的规范化定理 4.2 :一个 BCNF 的关系必定是 3NF 。( 3NF :任意的非主属性都不传递依赖于任意一个候选

键。)证明:用反证法。设 R 是一个 BCNF ,但不是 3NF ,则必存在一个非主属性 A 和候选键 X 以及属性集 Y ,使得 A 传递依赖于 X ,即 X→Y(Y 不包含于 X) , Y+>X ,Y→A 。

这就是说 Y 不包含 R 的候选键,但 Y→A却成立。 根据 BCNF 定义可知, R 不是 BCNF ,与题设矛盾。

结论 3 :任何的二元关系必定是 BCNF 。

武汉大学计算机学院数据库课程组

4.2 4.2 关系模式的规范化关系模式的规范化 3NF 下仍然存在插入异常和删除异常, 原因在于可能

存在主属性对候选键的部分函数依赖和传递函数依赖。

一个模式中的关系模式如果都属于 BCNF ,则在函数依赖的范畴内实现了彻底的分离,已消除了插入和删除的异常。

其它问题?

武汉大学计算机学院数据库课程组

4.2 4.2 关系模式的规范化关系模式的规范化六、第四范式: 4NF定义 4.10 若 R∈ 1NF , D 是 R 上的依赖集,如果对于任何一个多值依赖 XY (Y-X≠ф,XY没有包含 R 的全部属性 ) , X 都包含了 R 的一个候选关键词,则 R∈4NF 。

4NF必定是 BCNF ,但 BCNF 不一定是 4NF 。

武汉大学计算机学院数据库课程组

5种范式的关系:

4.2 关系模式的规范化

1NF

非规范化的关系

2NF

3NF

消除组合数据项

消除非主属性对键的部分函数依赖

消除非主属性对键的传递函数依赖

4NF

消除非平凡的多值依赖

BCNF

消除主属性对键的部分和传递函数依赖

范式的转换关系:

1NF

2NF

3NF

BCNF

4NF

武汉大学计算机学院数据库课程组

4.2 关系模式的规范化 关系的规范化是将一个低级范式的关系模式,通过关

系模式的分解转换为若干个高级范式的过程。

范式的转换过程是通过分析和消除属性间的数据依赖关系来实现的。

属性可分为键和非主属性。 2NF, 3NF考察非主属性和键的关系, BCNF考察主属性和键的关系。

属性间的依赖关系包括函数依赖和多值依赖。 1NF, 2NF, 3NF, BCNF考察了函数依赖关系; 4NF考察了多值依赖。

武汉大学计算机学院数据库课程组

4.3 数据依赖公理 1.阿氏公理定义 4.13 设 F 是关系模式 R 的函数依赖集, X 、 Y 是 R 的属性子集,

如果从 F 的函数依赖中能够推出 XY ,则称 F逻辑蕴涵 XY 。在 R<U , F> 中为 F 所逻辑蕴含的函数依赖全体叫 F 的闭包,记为:

F+ 。 F+={ ① F; ② F 中推出的非平凡的函数依赖; ③平凡的函数依赖: A->φ、 A->A 、 AB-> A….. } 例:有关系模式R(A,B,C),它的函依赖集 F={A→B,B→C},计算 F的闭包。

武汉大学计算机学院数据库课程组

4.3 数据依赖公理 Armstrong公理 (阿氏公理 ) : 对 R<U , F> 有: A1自反律:若 Y⊆X ,则 XY 。 A2增广律:若 XY ,则 XZYZ 。 A3 传递律:若 XY 、 YZ ,则 XZ 。

Note : XY 与 YX 的次序无关。

武汉大学计算机学院数据库课程组

4.3 数据依赖公理

证:设 s , t 是 r 的任意两个元组, r 是 R 的任意一个关系。

A1自反律:若 Y⊆X ,则 XY 。 若 s[x]=t[x],则在 s 和 t 中的 x的任何子集也必相等。 ∵ Y⊆X ,∴ s[y]=t[y] ∴ XY 。 A2增广律:若 XY ,则 XZYZ 。 若 s[xz]=t[xz],即 s[x]s[z]=t[x]t[z] 则 s[x]=t[x] 且 s[z]=t[z] ∵ XY , ∴ s[y]=t[y] ∴ s[yz]=s[y]s[z]=t[y]t[z]=t[yz] ∴ XZYZ

武汉大学计算机学院数据库课程组

4.3 数据依赖公理

A3 传递律:若 XY 、 YZ ,则 XZ 。 若 s[x]=t[x] ∵ XY ∴ s[y]=t[y] 又 ∵ YZ ∴ s[z]=t[z] ∴ XZ 。

武汉大学计算机学院数据库课程组

4.3 数据依赖公理

公理的推论: 合并规则:若 XY 、 XZ ,则 XYZ 。 分解规则:若 XYZ ,则 XY,XZ 。 伪传递规则:若 XY 、WYZ ,则WXZ 。 证明: 合并规则:∵ XY ∴ XXY (A2) 又∵ XZ ∴ XYYZ (A2) ∴ XYZ (A3)

武汉大学计算机学院数据库课程组

4.3 数据依赖公理

分解规则: ∵ Y⊆Y Z ∴ YZY (A1) 又∵ XYZ(已知) ∴ XY (A3) 同理可证 XZ 。伪传递规则:∵ XY ∴ WXWY (A2) 又∵ WYZ (已知 ) ∴ WXZ (A3) 定理 4.5: XA1A2…AK成立的充分必要条件是 XAi

成立。由合并律 由分解律

武汉大学计算机学院数据库课程组

4.3 数据依赖公理 定义 4.14: XF

+={A|XA 能由 F用阿氏公理导出 } XF

+ 称为属性集 X 关于 F 的闭包。

定理 4.6: XY 能从 F 中用阿氏公理导出的充要条件是: Y⊆XF

+

武汉大学计算机学院数据库课程组

4.3 数据依赖公理 定理 4.6的证明 证明: 充分性( Y⊆XF

+ -> XY ) 假设 Y⊆XF

+ ( 其中 Y=A1A2…An )

由属性闭包定义可知, XA1 , XA2… , XAn 能由阿氏公理导出,再由合并规则得 X A1A2…An ,即 XY 。

武汉大学计算机学院数据库课程组

4.3 数据依赖公理

必要性:( XY -> Y⊆XF+ )

假设 XY 能由阿氏公理导出 (Y=A1A2…An) 则有 XA1A2…An

由分解规则得: XA1 , XA2… , XAn

由 XF+ 的定义可知, Ai⊆ XF

+ (i=1,2,…,n) 即 Y⊆XF

+ 。

武汉大学计算机学院数据库课程组

ArmstrongArmstrong 公理系统公理系统 Armstrong 公理完备性的证明

证明:(构造性证明)用反证法假定存在函数依赖 XY 被 F 逻辑蕴涵,但 XY 不能用 Armstrong 公理从 F 中导出由引理二,构造 R(U) 上的关系 r 如下:

下面证明( 1 ) r 满足 F ,( 2 ) r 不满足 XY

FX

FX

FXY , Y ≠ , U ≠

r ( U )

t 1 0

s 1 1

FX

FX

武汉大学计算机学院数据库课程组

4.3 数据依赖公理2. 属性闭包的计算算法 4.1 : 求属性集 X 关于 F 的闭包 XF

+(X+) 。 算法: 设 R<U , F> , A 为 U 中属性 ( 集 ) 。 (1) X(0)=X (2) X(i+1)=X(i)∪A 其中:对 F 中任一个 Y->A ,且 Y⊆X(i); 求得 X(i+1) 后,对 Y->A 做删除标记。 (3) 若 X(i+1)=X(i) 或 X(i+1) =U 则结束,否则转 (2) 。

算法会终止吗?

最多 |U-X| 步

武汉大学计算机学院数据库课程组

闭包的计算闭包的计算 示例 1

R< U, F >, U = (A, B, C, G, H, I), F = {AB, AC, CGH, CGI, BH}, 计算

所用依赖

AB AGB AC AGBC CGH AGBCH CGI AGBCH I

= AGBCH I

FAG)(

FAG)(

FAG)(

武汉大学计算机学院数据库课程组

闭包的计算闭包的计算 示例 2

R< U, F >, U = (A, B, C, D, E), F = {ABC, BD, CE, CEB, ACB}, 计算

所用依赖

ABC ABC BD ABCD CE ABCDE

= ABCDE

FAB)(

FAB)(

FAB)(

武汉大学计算机学院数据库课程组

闭包的计算闭包的计算 示例 3

R< U, F >, U = (A, B, C, D, E, G), F = {AE, BEAG, CEA, GD}, 计算

所用依赖

AE ABE BEAG ABEG GD ABEGD

= ABEGD

FAB)(

FAB)(

FAB)(

武汉大学计算机学院数据库课程组

4.3 数据依赖公理

3. 函数依赖集的等价和覆盖定义 4.15 : 如果 F+=G+ ,就说函数依赖集 F覆盖 G 或 F

与 G等价。定理 4.9: F+=G+ 的充分必要条件是 F⊆G+ ,和 G⊆F+ 。( 1 )必要性∵F 和 G等价,∴ F+=G+ ,又∵ F⊆F+ ,∴ F⊆G+

同理,∵ G⊆G+ ,∴ G⊆F+ 。( 2 )充分性任取 X→Y∈F+ ,则有 Y⊆XF

+ ( 定理 4.6)又∵ F⊆G+ (已知),∴ Y⊆XG++

∴X→Y∈(G+)+=G+ ,∴ F+⊆G+ 。同理可证 G+⊆F+ ,∴ F+=G+ ,即 F 和 G等价。

武汉大学计算机学院数据库课程组

4.3 数据依赖公理 如何判断函数依赖集 F 和 G 是否等价? 根据定理 4.9: 只需 F⊆G+ 和 G⊆F+ ,即证集合的包含

关系。 对每个 T ∈ F, 有 T ∈ G+;对每个 S ∈G ,有 S ∈ F+ ,

T 和 S 是形如 X->Y 的属性依赖。 证 X->Y ∈ G+,根据定理 4.6:只需 Y ⊆ XG

+

转为计算 XG+

武汉大学计算机学院数据库课程组

4.3 数据依赖公理

例: F={A→B , B→C}, G={A→BC , B→C},判断 F和 G 是否等价。

解:( 1 )先检查 F 中的每一个函数依赖是否属于 G+ 。 ∵AG

+=ABC ,∴ B⊆AG+ ,∴ A→B∈G+ ( 定理 4.6)

又∵ BG+=BC ,∴ C⊆BG

+ ,∴ B→C∈G+

∴F⊆G+

( 2 )然后检查 G 中的每一个函数依赖是否属于 F+ 。 ∵AF

+=ABC ,∴ BC⊆AF+ ,∴ A→BC∈F+

又∵ BF+=BC ,∴ C⊆BF

+ ,∴ B→C∈F+

∴G⊆F+

由( 1)和( 2)可得 F和 G等价。

武汉大学计算机学院数据库课程组

4.3 数据依赖公理4.最小函数依赖集 定义 4.16: 若 F满足下列条件,则称其为一个最小函数依

赖集 Fm 。 (1) F中每个函数依赖的右部都是单属性; (2) 对于 F 的任一函数依赖 X→A , F-{X→A}与 F 都不等价;

(3) 对于 F中的任一函数依赖 X→A和 X的真子集 Z, (F-(X→A))U{Z→A}与 F都不等价。

最小:( 1 ) F中每个函数依赖的右部没有多余的属性; ( 2 ) F中不存在多余的函数依赖; ( 3 ) F中每个函数依赖的左部没有多余的属性。

武汉大学计算机学院数据库课程组

4.3 数据依赖公理 定理 4.10: 每个 F 与 Fm等价。 如何求最小函数依赖集 Fm ? (1) 分解:使 F 中任一函数依赖的右部仅含有单属性。 (2) 删除冗余的函数依赖: 方法:对 F 中任一 XA ,在 F-{XA}中求 X+ , 若 A⊆X+ ,则 XA 为多余的。 (3)最小化左边的多余属性: 方法:对 F 中任一 XYA ,在 F 中求 X+ , 若 A⊆X+ ,则 Y 为多余的。 [ (4)检查:用公理或 (2) ]

武汉大学计算机学院数据库课程组

4.3 数据依赖公理例:设有 F={B→C , C→AB , BC→A},求与 F等价的最小函数

依赖集。 分解 C→AB , F={B→C , C→A , C→B , BC→A} 判断 B→C 是否冗余, F’={C→A , C→B , BC→A} B+ = B, B→C 非冗余。 F={B→C , C→A , C→B , BC→A} 判断 C→A 是否冗余, F’={B→C, C→B , BC→A} C+ = ABC, C→A 冗余。 F={B→C , C→B , BC→A} 判断 C→B 是否冗余, F’={B→C, BC→A} C+ = C, C→B 非冗余。 F={B→C , C→B , BC→A} 判断 BC→A 是否冗余, F’={B→C , C→B} BC+ = BC, BC→A 非冗余。 F={B→C , C→B , BC→A} 判断 BC→A 。 B+ = ABC, A⊆B+ ,则 C 在 BC→A 中是多余的。 Fmin={B→C , C→B , B→A}

注意:

对当前 F求闭包

武汉大学计算机学院数据库课程组

4.3 数据依赖公理

例:设有函数依赖集 F={A→B,ABCD→E,EF→G,EF→H,ACDF→EG}

求与 F等价的最小函数依赖集。

注意:一个函数依赖集的最小集不是惟一的。例如, F={A→B , B→A , B→C , A→C , C→A} Fm1={A→B , B→C , C→A}, Fm2={A→B , B→A , A→C , C→A}。方法 1 : 无多余属性;依次判断 B->A, A->C 是否冗余;方法 2 : 无多余属性;依次判断 B->C 是否冗余。

Fmin = {A→B,ACD→E, EF→G,EF→H}

武汉大学计算机学院数据库课程组

4.4 关系模式的分解 对于存在数据冗余、插入异常、删除异常的关系

模式,可以通过对关系模式的分解来解决问题。关系模式分解后会带来两个问题:

( 1 )查询时的连接操作是否会丢失某些信息或多出某些信息。这引出了无损连接的概念。

( 2 )分解后的关系模式是否保持了原来的函数依赖。这是保持函数依赖性的问题。

武汉大学计算机学院数据库课程组

4.4 关系模式的分解1. 等价模式分解的定义 一个关系可以有多种分解方法,如何判断分解的好与坏呢?

例:关系模式 R(S# , SD , MN),F={S#→SD , SD<—>MN}

分解一: ρ1={R1(S#) , R2(SD) , R3(MN)} 不好!无法恢复 r.分解二: ρ2={R1(S#, SD), R2(S#,MN)} 不好!丢失 SD<—>MN分解三: ρ3={R1(S# , SD) , R2(SD , MN)} 好!

武汉大学计算机学院数据库课程组

R(A, B, C)

A B C

1 1 2

2 2 1

A B

1 1

2 2

B C

1 2

2 1

A B C

1 1 2

2 2 1

∏AB(R) ∏BC(R) ∏AB(R) ∏BC(R)

R(A, B, C)

A B C

1 1 1

2 1 2

A B

1 1

2 1

B C

1 1

1 2

A B C

1 1 1

1 1 2

2 1 1

2 1 2

∏AB(R) ∏BC(R) ∏AB(R) ∏BC(R)

有损分解

无损分解

武汉大学计算机学院数据库课程组

4.4 关系模式的分解

2.无损连接性与依赖保持性 对于 R<U , F> 中任何一个关系 r ,R 分解 ρ={R1, R2….RK} 无损连接性: r=ΠR1(r) ⋈ ΠR2(r) ⋈ … ⋈ ΠRK(r) 保持函数依赖: F ≡ ΠR1(F)∪ΠR2(F)∪… ΠRK(F) ΠRi(F)={X->Y| X->Y∈F+∧XY⊆Ri }

Ri 所蕴含的 F+

中的函数依赖

武汉大学计算机学院数据库课程组

4.4 关系模式的分解例: R(A , B , C) , F={A->B , A->C} ,分解 ρ={AB ,

AC} 判断 1 : r=ΠAB(r) |X| ΠAC(r) 是无损连接分解。 判断 2: F≡ΠAB(F)∪ΠAC(F) = {A->B , A->C} 具有函数依赖保持性。

A B C

a1 b1 c1

a2 b2 c2

a3 b1 c2

r

?ρ={AB , BC}

武汉大学计算机学院数据库课程组

4.4 关系模式的分解 算法 4.3 无损连接性检验。 输入:关系模式 R(A1 , A2 ,…, An) ,它的函数依赖集 F ,以及分解 ρ={R1 , R2 ,…, Rk}。 输出:确定 ρ是否具有无损连接性。方法: (1) 构造一个 k 行 n 列的表,第 i 行对应于关系模式 Ri ,第 j列对应于属性 Aj。如果 Aj∈Ri ,则在第 i 行第 j列上放符号 aj,否则放符号 bij。(属于用 a代表,且位置信息用 j表示;不属于用 b代表 ,

且位置信息用 ij表示。) (2) 重复考察 F 中的每一个函数依赖,并修改表中的元素。其方法如下:取 F 中一个函数依赖 X→Y ,在 X 的分量中寻找相同的行,然后将这些行中 Y 的分量改为相同的符号,如果其中有 aj,则将 bij改为 aj;若其中无 aj,则全部改为 bij( i 是这些行的行号最小值)。

武汉大学计算机学院数据库课程组

4.4 关系模式的分解(3) 如果发现表中某一行变成了 al , a2 ,…, an ,则分

解 ρ 具有无损连接性;如果 F 中所有函数依赖都不能再修改 表中的内容,且没有发现这样的行,则分解 ρ不具有无 损连接性。

武汉大学计算机学院数据库课程组

无损连接分解无损连接分解 示例一: U={A,B,C,D,E}, F={ABC, CD,DE}

={(A, B, C), (C, D), (D, E)}

A B C D E

ABC a1 a2 a3 b14 b15

CD b21 b22 a3 a4 b25

DE b31 b32 b33 a4 a5

A B C D E

ABC a1 a2 a3 b14 b15

CD b21 b22 a3 a4 b25

DE b31 b32 b33 a4 a5

ABC

A B C D E

ABC a1 a2 a3 a4 b15

CD b21 b22 a3 a4 b25

DE b31 b32 b33 a4 a5

CDA B C D E

ABC a1 a2 a3 a4 a5

CD b21 b22 a3 a4 a5

DE b31 b32 b33 a4 a5

DE

武汉大学计算机学院数据库课程组

4.4 关系模式的分解 示例二: U={A,B,C,D,E},

F={AC, BC, CD,DEC ,CEA} ={(A, D), (A, B), (B, E), (C, D, E), (A, E)}

A B C D E

AD a1 b12 b13 a4 b15

AB a1 a2 b23 b24 b25

BE b31 a2 b33 b34 a5

CDE b41 b42 a3 a4 a5

AE a1 b32 b33 b54 a5

AC

A B C D E

AD a1 b12 b13 a4 b15

AB a1 a2 b13 b24 b25

BE b31 a2 b33 b34 a5

CDE b41 b42 a3 a4 a5

AE a1 b32 b13 b54 a5

武汉大学计算机学院数据库课程组

4.4 关系模式的分解

BCA B C D E

AD a1 b12 b13 a4 b15

AB a1 a2 b13 b24 b25

BE b31 a2 b13 b34 a5

CDE b41 b42 a3 a4 a5

AE a1 b32 b13 b54 a5

CDA B C D E

AD a1 b12 b13 a4 b15

AB a1 a2 b13 a4 b25

BE b31 a2 b13 a4 a5

CDE b41 b42 a3 a4 a5

AE a1 b32 b13 a4 a5

武汉大学计算机学院数据库课程组

4.4 关系模式的分解

DECA B C D E

AD a1 b12 b13 a4 b15

AB a1 a2 b13 a4 b25

BE b31 a2 a3 a4 a5

CDE b41 b42 a3 a4 a5

AE a1 b32 a3 a4 a5

CEAA B C D E

AD a1 b12 b13 a4 b15

AB a1 a2 b13 a4 b25

BE a1 a2 a3 a4 a5

CDE a1 b42 a3 a4 a5

AE a1 b32 a3 a4 a5

武汉大学计算机学院数据库课程组

4.4 关系模式的分解 定理 4.12 设 ρ=(R1 , R2) 是 R 的一个分解, F 是 R 上的函数 依赖集,分解 ρ具有无损连接性的充分必要条件是: R1∩R2→(R1-R2)∈F+

或 R1∩R2→(R2-R1)∈F+

证明: ( 1 )充分性:设 R1∩R2→(R1-R2) ,按算法 5.2 可构造出下

表。表中省略了 a 和 b 的下标,这无关紧要。

Ri R1∩R2 R1-R2 R2-R1

R1 aa…a aa…a bb…b

R2 aa…a bb…b aa…a

只能用于判断分解为2 个子模式的情况。

武汉大学计算机学院数据库课程组

4.4 关系模式的分解 如果 R1∩R2→(R1-R2) 在 F 中,则可将表中第 2 行位于 (R1-R2) 列 中的所有符号都改为 a ,这样该表中第 2 行就全是 a 了,则 ρ具有无 损连接性。同理可证 R1∩R2→(R2-R1) 的情况。 如果 R1∩R2→(R1-R2) 不在 F 中,但在 F+ 中,即它可以用公理从 F 中推出来,从而也能推出 R1∩R2→Ax, 其中 Ax⊆R1-R2 ,所以可 以将 Ax列的第 2 行改为全 a ,同样可以将 R1-R2 中的其他属性的第 2 行也改为 a ,这样第 2 行就变成全 a 行。所以分解 ρ={R1 , R2} 具有 无损连接性。 同样可以证明 R1∩R2→(R2-R1) 的情况。 ( 2 )必要性:设构造的表中有一行全为 a ,例如第 1 行全为 a ,则 由函数依赖定义可知 R1∩R2→(R2-R1);如果是第 2 行全为 a ,则 R1∩R2→(R1-R2) 。定理证毕。

武汉大学计算机学院数据库课程组

4.4 关系模式的分解例 : 下列分解是否具有无损连接性和函数依赖保持性。 已知: R(A,B,C) F={A→B , C→B} (1 ) ρ1={AB , BC}( 2 ) ρ2={AC , BC}

武汉大学计算机学院数据库课程组

4.4 关系模式的分解

Ri A B C

AB a1 a2 b13

BC b21

a2 a3

( 1 )对 ρ1 和 F 构造表:

( 2 )检查 F={A→B , C→B} 对 A→B , A 列中无相同的行; 对 C→B, C 列中无相同的行。 ρ1 不具有无损连接性。

ρ1={AB , BC}

F={A→B , C→B}

武汉大学计算机学院数据库课程组

4.4 关系模式的分解 ρ1={AB , BC} F={A→B , C→B}

利用定理 4.12 解。 R1∩R2 = B (R1-R2) = A R1∩R2 +> (R1-R2) ρ1 不是无损连接分解。

武汉大学计算机学院数据库课程组

4.4 关系模式的分解

Ri A B C

AC a1 b12 a3

BC b21 a2 a3

ρ2={AC , BC}

F={A→B , C→B}

对 ρ2 和 F 构造表:

检查 F={A→B , C→B} 对 C→B, C 列有相同的行,改写 B 列的相异符号为 a ,下标为列号 2 。第一行变为 a1a2a3,ρ2具有无损连接性。

Ri A B C

AC a1 a2 a3

BC b21 a2 a3

武汉大学计算机学院数据库课程组

4.4 关系模式的分解 ρ2={AC , BC} F={A→B , C→B}

利用定理 4.12 解。 R1∩R2 = C (R1-R2) = A; (R2-R1) = B; R1∩R2 +> (R2-R1) ρ2 是无损连接分解。

武汉大学计算机学院数据库课程组

4.4 关系模式的分解3. 模式分解的方法 3NF 的保持无损连接及函数依赖的分解: 设: R<U , Fm> 1) 对 Fm 中任一 X->A ,若 XA=U 则不分解,结束。 2) 若 R 中 Z 属性在 Fm 中未出现,则所有 Z 为一个子

模式, 令 U=U-Z 。 3) 对 Fm 中 X->A1 ,… . X->An ,用合成规则合成一

个, 再对 Fm 中每个 X->A ,令 Ri=XA 。 4) R 的分解为 {R1 , R2 ,… .RK,键 }

依赖保持不需要;原包含有不需要。

武汉大学计算机学院数据库课程组

4.4 关系模式的分解 BCNF 的保持无损连接的分解:( 1 )令ρ={R} ;( 2 )如果ρ中所有关系模式都是 BCNF ,则转( 4 );( 3 )如果 ρ中有一个关系模式 Ri<Ui , Fi> 不是 BCNF ,

则 Ri 中必有 X→A∈Fi+(AX) ,且 X 不是 Ri 的键。设 S1=

XA , S2=Ui-A ,用分解 {S1 , S2} 代替 Ri<Ui , Fi> ,转( 2 );

( 4 )分解结束,输出 ρ。例:设 R={A,B,C,D},F={A→C , C→A , B→AC , D→AC ,

BD→A} ( 1 )将 R 分解为 3NF 且具有无损连接性和依赖保持性。 ( 2 )将 R 分解为 BCNF 且具有无损连接性。

武汉大学计算机学院数据库课程组

关系模式的分解算法关系模式的分解算法 示例: U={S# , SD , MN , C# , G}

F={S#SD , S#MN , SDMN , (S#,C#)G}

⒈U1={S# , SD} , F1={S#SD}

U2={S#, MN, C#, G}, F2={S#MN, (S#,C#)G}

⒉U1 = {S#, SD}, F1={S#SD} U2 = {S#, MN}, F2={S#MN}

U3 = {S#, C#, G}, F3 = {(S#,C#)G}

武汉大学计算机学院数据库课程组

4.4 关系模式的分解关系模式 CTHRSG ,其中 C 表示课程, T 表示教师, H表示时

间, R 表示教室, S 表示学生, G 表示成绩。函数依赖集 F及

其所反映的语义分别为:

CT 每门课程仅有一位教师担任。

HTR 在任一时间,一个教师只能在一个教室上课。

HRC 在任一时间,每个教室只能上一门课。

HSR 在任一时间,每个学生只能在一个教室听课。

CSG 每个学生学习一门课程只有一个成绩。

武汉大学计算机学院数据库课程组

4.4 关系模式的分解 解:解: HSHSCTHRSGCTHRSG ,, HSHS 是关系模式的关键字是关系模式的关键字。。

⑴ ⑴ 面向面向 3NF3NF 且保持函数依赖的分解。且保持函数依赖的分解。

最小函数依赖集为 F={CT,CSG,HRC,HSR,THR}

分解为:= {CT , CSG , HRC , HSR , THR}

⑵ ⑵ 面向面向 3NF3NF既有无损连接性又保持函数依赖的分解。既有无损连接性又保持函数依赖的分解。

∵ HS 是关键字, = ∪ { HS } , HS 是 HSR 的一个子集

∴分解仍为:= {CT , CSG , HRC , HSR , THR}

武汉大学计算机学院数据库课程组

4.4 关系模式的分解 ⑶ 面向 BCNF 且具有无损连接性的分解。

CTHRSGKey=HS

CSGKey=CSCSG

CTHRS Key=HSCT , THR

HRC , HSR

CTKey=CCT

CHRS Key=HSCHR , HRC

HSR

CHRKey=CH , HR

CHR , HRC

CHSKey=HS HSC

武汉大学计算机学院数据库课程组

规范化的问题规范化的问题1. 规范化的优缺点 关系模式的分解会降低查询的效率。 所讨论的关系规范化是基于泛关系假设的,即只基于一个关系模式的规范化。但现实并不一定满足。2.反规范化的设计 对一些特定的应用不规范化,而是通过使用冗余来改进性能。例: account(帐号,支行名,余额 ) depositor(客户名,帐号 ) 每次访问帐户时,帐户持有者的名字都与帐户密码和余额一起显示。

武汉大学计算机学院数据库课程组

规范化的问题规范化的问题 并不是规范化程度越高越好。例: earnings(公司号,年份,数量 ) 若设计成: ( 1 )使用多个关系 ,每年建一个表。 不好!(是 BCNF ) ( 2 )使用一个关系: company_year(公司号,收入 _2000,收入 _2001 ,收入 _2002)

不好! (是 BCNF )

武汉大学计算机学院数据库课程组

第 4章 关系数据库理论小结 :1. 函数依赖关系2. 关系模式的规范化

几种常见范式及其转换3. 阿氏公理及其推理规则4. 用函数依赖或 XF

+求键5. 求最小函数依赖集 Fm6. 模式分解的概念、方法

本章练习:

本章思考题: 1 、关系模式的规范化的意义? 2、 XF

+ 与 XF+ 的关系?

3、最小函数依赖集 Fm的概念与作用?