第4章关系数据 库的规范化设计
第4章 关系数据 库的规范化设计
本章重要概念 (1)关系模式的冗余和异常问题 (2)FD的定义、逻辑蕴涵、闭包、推理规则、与 关键码的联系;平凡的FD;属性集 的闭包;推理规则的正确性和完备性;FD集的等价; 最小依赖集。 (3)无损分解的定义、性质、测试;保持依赖集的分 解 (4)关系模式的范式:1NF,2NF,3NF,BCNF。分 解成2NF、3NF模式集的算法。 (5)MVD、4NF、JD和5NF的定义
本章重要概念 (1)关系模式的冗余和异常问题。 (2)FD的定义、逻辑蕴涵、闭包、推理规则、与 关键码的联系;平凡的FD;属性集 的闭包;推理规则的正确性和完备性;FD集的等价; 最小依赖集。 (3)无损分解的定义、性质、测试;保持依赖集的分 解。 (4)关系模式的范式:1NF,2NF,3NF,BCNF。分 解成2NF、3NF模式集的算法。 (5)MVD、4NF、JD和5NF的定义
关系数据库的规范化设计是指面对一个现实问题,如 何选择一个比较好的关系模式集合。规范化设计理 论主要包括三个方面的内容:数据依赖、范式和模 式设计方法。其中数据依赖起着核心的作用。数据 依赖研究数据之间的联系,范式是关系模式的标准, 模式设计方法是自动化设计的基础。规范化设计理 论对关系数据库结构的设计起着重要的作用
前言 ❖ 关系数据库的规范化设计是指面对一个现实问题,如 何选择一个比较好的关系模式集合。规范化设计理 论主要包括三个方面的内容:数据依赖、范式和模 式设计方法。其中数据依赖起着核心的作用。数据 依赖研究数据之间的联系,范式是关系模式的标准, 模式设计方法是自动化设计的基础。规范化设计理 论对关系数据库结构的设计起着重要的作用
4.1.1关系模型的外延和内涵 令外延就是通常所说的关系、表或当前值,它的基本性质已在 第2章介绍过。由于用户经常对关系进行插入、删除和修改 花 作,因此外延是与时间有关的,随着时间的推移在不断变 令内涵是与时间独立的,是对数据的定义以及数据完整性约束 的定义。对数据的定义包括对关系、属性、域的定义和说明 对数据完整性约束的定义涉及面较广,主要包括以下几个方 面 令·静态约束,涉及到数据之间联系(称为“数据依赖,data dependences)、主键和值域的设计。 动态约束,定义各种操作(插入、删除、修改)对关系值 的影响
4.1.1 关系模型的外延和内涵 ❖ 外延就是通常所说的关系、表或当前值,它的基本性质已在 第2章介绍过。由于用户经常对关系进行插入、删除和修改 操作,因此外延是与时间有关的,随着时间的推移在不断变 化。 ❖ 内涵是与时间独立的,是对数据的定义以及数据完整性约束 的定义。对数据的定义包括对关系、属性、域的定义和说明。 对数据完整性约束的定义涉及面较广,主要包括以下几个方 面: ❖ ·静态约束,涉及到数据之间联系(称为“数据依赖,data dependences)、主键和值域的设计。 ❖ ·动态约束,定义各种操作(插入、删除、修改)对关系值 的影响
4.1.2关系模式的冗余和异常问题 例4.1 TNAME ADDRESS C CNAME t1 al n1 tl a c2 n2 tl al n 3 t2 C4 t2 aaa 223 nn 42 t3 CC 6 n4
4.1.2 关系模式的冗余和异常问题 (一) ❖ 例4.1 TNAME ADDRESS C# CNAME t1 a1 c1 n1 t1 a1 c2 n2 t1 a1 c3 n3 t2 a2 c4 n4 t2 a2 c5 n2 t3 a3 c6 n4
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