820 likes | 1.08k Views
第 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 — 成绩。.
E N D
第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—成绩。 关系S存在以下问题: 1.数据冗余度高。 SNAME、CLASS、TNAME、TAGE、ADDRESS重复存储多次。
4.1函数依赖 2.数据修改复杂。 3.插入异常。 插入异常是指应该插入到数据库中的数据不能执行插入操作的情形。 关系S的主键: (S#,C#) 从在S#、C#、和(S#,c#)上出现NULL值去分析。 注意:当一个元组在主键的属性上部分或全部为空时,该元组不能插入到关系中。
4.1函数依赖 4.删除异常。 删除异常是指不应该删去的数据被删去的情形。 例如:选修某门课的所有学生都退选时,删除相关元组,会丢失该课程老师的信息。 • 解决:关系模式分解(关系规范化) • 分解为 ST(S#,SNAME,CLASS) CT(C#,TNAME) TA(TNAME,TAGE,ADDRESS) SC(S#,C#,GRADE)
二、函数依赖functional dependency, abbr. FD 设:R(A1,A2,…An)=R( U ) X,Y,Z 为U的不同子集 4.1函数依赖 属性全集 • 定义4.1: ① 函数依赖 是完整性约束的一种,它推广了关键词的概念。If t1.X=t2.X, then t1.Y=t2.Y ②函数依赖:若R的任意关系有:对X中的每个属性值,在Y中都有惟一的值与之对应,则称Y函数依赖于X,记作 XY。
4.1函数依赖 • 例:指出下列关系R中的函数依赖。 FD: AB->C、 A→C、C→A、AB→D? Insert into R values(a1, b1, c2, d1) FD = key constraint ?
4.1函数依赖 函数依赖与属性间的关系有: • 若X,Y是1 — 1关系, 则存在 XY或Y X 。如学号与借书证号 • 若X,Y是m — 1关系, 则存在 XY但 Y+> X。如学号与姓名 • 若X,Y是m — n关系, 则X,Y间不存在函数依赖关系。如姓名与课程 CF: 实体间的联系 NOTE: 函数依赖的方向性
4.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
三、函数依赖的分类 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,记作:XF >Y。 部分函数依赖:是指XY,且存在X的真子集X’, 有X’->Y, 记作:X P>Y。 定义4.3:在R( U )中 传递函数依赖:是指若XY (Y不包含于X), Y +> X , 而Y Z。记作: X T> Z 。 4.1函数依赖
4.1函数依赖 • 左部为单属性的函数依赖一定是完全函数依赖。 • 左部为多属性的函数依赖,如何判断其是否为完全函数依赖? 方法:取真子集,看其能否决定右部属性。 例:试指出学生关系S中存在的完全函数依赖和部分函数依赖。 • S#→SNAME,S#→CLASS,TNAME→TAGE, TNAME→ADDRESS,C#→TNAME都是完全函数依赖。 • (S#,C#)→GRADE 是一个完全函数依赖,因为S#+>GRADE,C#+>GRADE。
4.1函数依赖 (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。 例:试指出学生关系S中存在的传递函数依赖。 解:因为C#→TNAME,TNAME+>C#,TNAME→TAGE,所以C#→TAGE 是一个传递函数依赖。类似地,C#→ADDRESS也是一个传递函数依赖。
四、候选键 用函数依赖的概念来定义键。 定义4.4 : 设X为R<U,F>中的属性或属性组合,若 XF >U则X为R的候选键。 说明: XF >U X -> U X能决定整个元组 X’+> U X中无多余的属性 术语: 主键 主属性: 侯选键中的属性 非主属性 全键:整个属性组为键 例:R(顾客,商品,日期) 4.1函数依赖
4.1函数依赖 • 例:试指出下列关系R中的侯选键、主属性和非主属性。 函数依赖判断:A->D? D->A? … AD->E?… 候选键判断: A->ADE?… AD->ADE?… 解:关系R的侯选键为:A,(D,E) 关系R的主属性为:A,D,E 关系R的非主属性:无
4.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.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 关系模式的规范化 一、关系与范式 • 关系的规范化是将一个低级范式的关系模式,通过关系模式的分解转换为若干个高级范式的过程。 • 关系模式分解的目的:去冗余、满足约束。 • 关系模式的冗余性问题。例R(A,B,C),无任何约束可导致冗余,若规定FD:A->B,则冗余可利用FD预测到。 • 约束条件通过函数的多值依赖和连接依赖及范式完成。
4.2 关系模式的规范化 二、第一范式:1NF 定义4.5: 若R的每个分量都是不可分的数据项,则R∈1NF。 从型上看:不存在嵌套结构 从值上看,不存在重复组 1NF是关系模式的最低要求。 • 例:学生关系S(S#,SNAME,CLASS,C#,TNAME,TAGE,ADDRESS,GRADE)是1NF关系,但它存在数据冗余,插入异常和删除异常等问题。
4.2 关系模式的规范化 三、第二范式: 2NF 定义4.6若R∈1NF,且R中的每一个非主属性都完全函数依赖于R的任一候选键,则R∈2NF。 • 例:学生关系S(S#,SNAME,CLASS,C#,TNAME,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 关系模式的规范化 • 分解为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 关系模式的规范化 • 关系S分解为三个关系: ST(S#,SNAME,CLASS)(只依赖S#的属性分解到一个子模式中) CTA(C#,TNAME,TAGE,ADDRESS) (只依赖C#的属性分解到另一个子模式中) SC(S#,C#,GRADE) (完全函数依赖于候选键的属性分解到第三个子模式中) 分解后,关系ST、CTA和SC都为2NF。 结论1:若关系R的侯选键是单属性的,则R必定是2NF。
4.2 关系模式的规范化 • 达到2NF的关系仍然可能存在问题。 例如,在关系CTA中还存在以下问题: (1) 数据冗余。一个教师承担多门课程时,教师的姓名、年龄、地址要重复存储。 (2) 修改复杂。一个教师更换地址时,必须修改相关的多个元组。 (3) 插入异常。一个新教师报到,需将其有关数据插入到CTA关系中,但该教师暂时还未承担任何教学任务,则因缺键C#值而不能进行插入操作。 (4) 删除异常。删除某门课程时,会丢失该课程任课教师的姓名、年龄和地址信息。
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 关系模式的规范化 • 分解为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.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 关系模式的规范化 • 通过转为2NF消除了部分依赖,通过转为3NF消除了传递依赖,问题:达到3NF的关系是否仍然存在问题? • 例:每一教师只教一门课。每门课由若干教师教,某一学生选定某门课,就确定了一个固定的教师。某个学生选修某个教师的课就确定了所选课的名称 :
4.2 关系模式的规范化 解:关系SCT的侯选键:(S#,CNAME)和(S#,TNAME) 非主属性:无 (SCT至少是一个3NF关系) 结论2:若关系R的所有属性都是主属性,则R必定是3NF。 候选键判断: S#->S# CNAME TNAME.. 取左部的相同值,判断右部。
4.2 关系模式的规范化 在3NF关系SCT中存在: • 插入异常。例如,一个新课程和任课教师的数据,在没有学生选课时不能插入数据库。 • 删除异常。例如,删除某门课的所有选课记录,会丢失课程与教师的数据。 • 达到3NF的关系仍然可能存在问题。
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 关系模式的规范化 • 分解为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:一个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 关系模式的规范化 • 3NF下仍然存在插入异常和删除异常, 原因在于可能存在主属性对候选键的部分函数依赖和传递函数依赖。 • 一个模式中的关系模式如果都属于BCNF,则在函数依赖的范畴内实现了彻底的分离,已消除了插入和删除的异常。 • 其它问题?
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 1NF 2NF 2NF 3NF BCNF 3NF 4NF BCNF 范式的 转换关系: 4NF
4.2 关系模式的规范化 • 关系的规范化是将一个低级范式的关系模式,通过关系模式的分解转换为若干个高级范式的过程。 • 范式的转换过程是通过分析和消除属性间的数据依赖关系来实现的。 • 属性可分为键和非主属性。 2NF, 3NF考察非主属性和键的关系,BCNF考察主属性和键的关系。 • 属性间的依赖关系包括函数依赖和多值依赖。 1NF, 2NF, 3NF, BCNF考察了函数依赖关系;4NF考察了多值依赖。
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 数据依赖公理
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.14: XF+={A|XA能由F用阿氏公理导出} XF+称为属性集X关于F的闭包。 定理4.6: XY能从F中用阿氏公理导出的充要条件是:Y⊆XF+ 4.3 数据依赖公理
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+。
Armstrong公理系统 r( U ) t 1 0 s 1 1 Y ,Y ≠ , U ≠ • Armstrong公理完备性的证明 证明:(构造性证明)用反证法 假定存在函数依赖XY被F逻辑蕴涵,但XY不能用Armstrong公理从F中导出 由引理二, 构造R(U)上的关系r如下: 下面证明(1)r满足F,(2)r不满足XY
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)。 4.3 数据依赖公理 算法会终止吗? 最多|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
闭包的计算 • 示例2 R< U, F >, U = (A, B, C, D, E), F = {ABC, BD, CE, CEB, ACB},计算 所用依赖 ABC ABC BD ABCD CE ABCDE = ABCDE
闭包的计算 • 示例3 R< U, F >, U = (A, B, C, D, E, G), F = {AE, BEAG, CEA, GD},计算 所用依赖 AE ABE BEAG ABEG GD ABEGD = ABEGD
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+