4.1.2关系模式的冗余和异常问题 (二) 令数据冗余。如果一个教师教几门课程,那么这个教师的地址就要重复几次存 储 令操作异常。由于数据的冗余,在对数据操作时会引起各种异常: ①修改异常。譬如教师t1教三门课程,在关系中就会有三个元组。如果他的地址 成这教建(推址都婴座案一象个元组中的地址未更改,就会 ②插入异第。如果二个教师刚调,尚未分派教学任条:那么要将教师的姓名 属性C#和 奴据 库技术中空值的语义是非常复杂的,对带空值元组的检索和操作也十分麻烦。 删除异常。如果在图4.1要取消教师t3的教学任务,那么就要把这个教师的 元组删去,同时也把t3的地址信息从表中删去了。这是一种不合适的现象
4.1.2 关系模式的冗余和异常问题 (二) ❖ 数据冗余。如果一个教师教几门课程,那么这个教师的地址就要重复几次存 储。 ❖ 操作异常。由于数据的冗余,在对数据操作时会引起各种异常: ① 修改异常。譬如教师t1教三门课程,在关系中就会有三个元组。如果他的地址 变了,这三个元组中的地址都要改变。若有一个元组中的地址未更改,就会 造成这个教师的地址不惟一,产生不一致现象。 ② 插入异常。如果一个教师刚调来,尚未分派教学任务,那么要将教师的姓名 和地址存储到关系中去时,在属性C#和CNAME上就没有值(空值)。在数据 库技术中空值的语义是非常复杂的,对带空值元组的检索和操作也十分麻烦。 ③ 删除异常。如果在图4.1中要取消教师t3的教学任务,那么就要把这个教师的 元组删去,同时也把t3的地址信息从表中删去了。这是一种不合适的现象
4.1.2关系模式的冗余和异常问题 TNAME ADDRESS TNAME C# CNAME t1 t1 C n t2 a2 t c2 n2 t3 a3 tl C n t2 c4 n 4 t2 5 n2 t3 6 n 4
4.1.2 关系模式的冗余和异常问题 (三) TNAME ADDRESS TNAME C# CNAME t1 a1 t1 c1 n1 t2 a2 t1 c2 n2 t3 a3 t1 c3 n3 t2 c4 n4 t2 c5 n2 t3 c6 n4
42.1函数依赖的定义(-) 令定义4.1设有关系模式R(U),Ⅹ和Y是属 性集U的子集,函数依赖( functional dependency, 简记为FD)是形为X→Y的 个命题,只要r是R的当前关系,对r中任意两 个元组t和s,都有t[Ⅺ]=s[]蕴涵t[Y] =s[Y],那么称FDX→Y在关系模式R(U) 中成立
4.2.1 函数依赖的定义(一) ❖ 定义4.1 设有关系模式R(U),X和Y是属 性集U的子集,函数依赖(functional dependency,简记为FD)是形为X→Y的一 个命题,只要r是R的当前关系,对r中任意两 个元组t和s,都有t[X]=s[X]蕴涵t[Y] =s[Y],那么称FD X→Y在关系模式R(U) 中成立
4.2.1函数依赖的定义(二) 例4.2 A B C A B C D al al b2 c2 d2 a2 b2 d3 b2 d3 a3 b1 c4 d4 a3 b2 C4 d4
4.2.1 函数依赖的定义(二) ❖ 例4.2 A B C D A B C D a1 b1 c1 d1 a1 b1 c1 d1 a1 b1 c2 d2 a1 b2 c2 d2 a2 b2 c3 d3 a2 b2 c3 d3 a3 b1 c4 d4 a3 b2 c4 d4
42.1函数依赖的定义(三) 例4.3有一个关于学生选课、教师任课的关系模式: R( S#, SNAME, C#, GRADE, CNAME, TNAME, TAGE) 属性分别表示学生学号、姓名、选修课程的课程号、成绩、课程名、任课教师姓 名和年龄等意义。 如果规定,每个学号只能有一个学生姓名,每个课程号只能决定一门课程,那么 可写成下列FD形式 S#, SNAME O#→ CNAME 每个学生每学一门课程,有一个成绩,那么可写出下列FD: (S#,C#)→ GRADE 还可以写出其他一些FD: C#→( CNAME, TNAME,TAGE) TNAME→→TAGE
4.2.1 函数依赖的定义(三) 例4.3 有一个关于学生选课、教师任课的关系模式: R(S#,SNAME,C#,GRADE,CNAME,TNAME,TAGE) 属性分别表示学生学号、姓名、选修课程的课程号、成绩、课程名、任课教师姓 名和年龄等意义。 如果规定,每个学号只能有一个学生姓名,每个课程号只能决定一门课程,那么 可写成下列FD形式: S#→SNAME C#→CNAME 每个学生每学一门课程,有一个成绩,那么可写出下列FD: (S#,C#)→GRADE 还可以写出其他一些FD: C#→(CNAME,TNAME,TAGE) TNAME→TAGE