武汉大学计算机学院数据库课程组 第4章关系数据理论 41函数依赖 42关系模式的规范化 43数据依赖公理 44关系模式的分解 本章小结 合pp
武汉大学计算机学院数据库课程组 4.1 函数依赖 4.2 关系模式的规范化 4.3 数据依赖公理 4.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、TAE、 ADDRESS重复存储多次。 由由
武汉大学计算机学院数据库课程组 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.1函数依赖 数据修改复杂 3.插入异常。 插入异常是指应该插入到数据库中的数据不能执 行插入操作的情形。 关系S的主键:(S#,C#) 从在s#、c#、和(S#c#)上出现NULL值去分析。 注意:当一个元组在主键的属性上部分或全部为空 时,该元组不能插入到关系中
武汉大学计算机学院数据库课程组 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 碰心心
武汉大学计算机学院数据库课程组 4.1函数依赖 4.删除异常。 删除异常是指不应该删去的数据被删去的情形。 例如:选修某门课的所有学生都退选时,删除相关元组, 会丢失该课程老师的信息。 ▪ 解决:关系模式分解(关系规范化) ▪ 分解为 ST(S#,SNAME,CLASS) CT(C#,TNAME) TA(TNAME,TAGE,ADDRESS) SC(S#,C#,GRADE)
武汉大学计算机学院数据库课程组 4.1数依赖 、函数依赖 functional dependency, abbr.FD 设:R(A1,A2,…,An)=R(U) X,Y,Z为U的不同子集 属性全集 定义4.1: ①函数依赖是完整性约束的一种,它推广了关键词 的概念。Ift1X=t2 X then t1Y=t2Y ②函数依赖:若R的任意关系有:对X中的每个属性值, 在Y中都有惟一的值与之对应,则称Y函数于X, 记作X→Y。 心<心
武汉大学计算机学院数据库课程组 4.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, 记作 X→Y 。 属性全集
武汉大学计算机学院数据库课程组 4.1函数依赖 例:指出下列关系R中的函数依赖。 A al b1 C1 al b1 c1 a1 b2 c2 ddd a2 b1 C3 d 1 FD:AB->C、A→C、C→A、AB→D? Insert into R values(al, b1, c2, d1) Fd E key constraint NEXT 合pp
武汉大学计算机学院数据库课程组 4.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.1函数依赖 函数依赖与属性间的关系有: 若X,Y是1一1关系, 则存在X→Y或Y→X。如学号与借书证号 若X,Y是m一1关系, 则存在X→Y但Y+>X。如学号与姓名 若X,Y是m一n关系, 则X,Y间不存在函数依赖关系。如姓名与课程 CF:实体间的联系 NoTE:函数依赖的方向性
武汉大学计算机学院数据库课程组 4.1函数依赖 函数依赖与属性间的关系有: ◼ 若X,Y是1 — 1关系, 则存在 X→Y或Y →X 。如学号与借书证号 ◼ 若X,Y是m — 1关系, 则存在 X→Y但 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 合pp
武汉大学计算机学院数据库课程组 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
武汉大学计算机学院数据库课程组 4.1函数依赖 、函数依赖的分类 X→Y,但Y不包含于X则称X是非平凡的函数依赖。 X→Y,但Y≌Ⅹ则称X是平凡的函数依赖 若X→Y,则X叫做决定因素。 若X→Y,Y→X,则记作:XY。 定义42:在R(U)中,XYZ为U的不同子集。 ■完全函数依赖:是指X→Y,且对任何X的真子集X, 都有X+>Y,记作:XF>Y ■部分函数依赖:是指X→Y,且存在X的真子集X, 有X->Y,记作:XP、V。 定义4.3:在R(U)中 传递函数依赖:是指若X→Y(Y不包含于X,Y+>X, 而Y→Z。记作:X厂>Z。 合pp
武汉大学计算机学院数据库课程组 4.1函数依赖 三、函数依赖的分类 ▪ X→Y,但Y 不包含于 X则称X是非平凡的函数依赖。 ▪ X→Y,但Y ⊆ X 则称X是平凡的函数依赖。 ▪ 若X→Y ,则X叫做决定因素。 ▪ 若X→Y,Y →X,则记作: XY。 定义4.2:在R( U)中,X, Y, Z为U的不同子集。 ◼ 完全函数依赖: 是指 X→Y,且对任何X的真子集X’, 都有X’+>Y,记作:X F > Y。 ◼ 部分函数依赖: 是指X→Y,且存在X的真子集X’, 有X’->Y, 记作:X P > Y。 定义4.3:在R( U )中 ◼ 传递函数依赖:是指若X→Y (Y 不包含于 X), Y +> X , 而Y → Z。记作: X T > Z
武汉大学计算机学院数据库课程组 4.1函数依赖 左部为单属性的函数依赖一定是完全函数依赖。 ■左部为多属性的函数依赖,如何判断其是否为完全函数依赖? 方法:取真子集,看其能否决定右部属性。 例:试指出学生关系S中存在的完全函数依赖和部分函数依赖。 ■S#→ SNAME,S#→ CLASS, TNAME→TAGE, TNAME→ ADDRESS,C#→ TNAME都是完全函数依赖。 (S#,C#)→ GRADE是一个完全函数依赖,因为S#+> GRADE, C#十≥ GRaDE 合pp
武汉大学计算机学院数据库课程组 4.1函数依赖 ◼ 左部为单属性的函数依赖一定是完全函数依赖。 ◼ 左部为多属性的函数依赖,如何判断其是否为完全函数依赖? 方法:取真子集,看其能否决定右部属性。 例:试指出学生关系S中存在的完全函数依赖和部分函数依赖。 ◼ S#→SNAME,S#→CLASS,TNAME→TAGE, TNAME→ADDRESS,C#→TNAME都是完全函数依赖。 ◼ (S#,C#)→GRADE 是一个完全函数依赖,因为S#+>GRADE, C#+>GRADE