武汉大学计算机学院数据库课程组 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,则记作:X<一一>Y。 定义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,则记作: X<— —>Y。 定义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