文档介绍:第4章关系数据库的规范化设计
*
1
本章重要概念
(1)关系模式的冗余和异常问题。
(2)FD的定义、逻辑蕴涵、闭包、推理规则、与关键码的联系;平凡的FD;属性集的闭包;推理规则的正确性和完备性;FD集的等价;最小依赖集。
(3)无损分解的定义、性质、测试;保持依赖集的分解。
(4)关系模式的范式:1NF,2NF,3NF,BCNF。分解成2NF、3NF模式集的算法。
Date
2
前言
关系数据库的规范化设计是指面对一个现实问题,如何选择一个比较好的关系模式集合。规范化设计理论主要包括三个方面的内容:数据依赖、范式和模式设计方法。其中数据依赖起着核心的作用。数据依赖研究数据之间的联系,范式是关系模式的标准,模式设计方法是自动化设计的基础。规范化设计理论对关系数据库结构的设计起着重要的作用。
Date
3
关系模型的外延和内涵
外延就是通常所说的关系、表或当前值,它的基本性质已在前面介绍过。由于用户经常对关系进行插入、删除和修改操作,因此外延是与时间有关的,随着时间的推移在不断变化。
内涵是与时间独立的,是对数据的定义以及数据完整性约束的定义。对数据的定义包括对关系、属性、域的定义和说明。对数据完整性约束的定义涉及面较广,主要包括以下几个方面:
静态约束,涉及到数据之间联系(称为“数据依赖,data dependences)、主键和值域的设计。
动态约束,定义各种操作(插入、删除、修改)对关系值的影响。
Date
4
关系模式的冗余和异常问题(一)
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
关系模式R的实例
Date
5
关系模式的冗余和异常问题(二)
数据冗余
如果一个教师教几门课程,那么这个教师的地址就要重复几次存储。
操作异常
由于数据的冗余,在对数据操作时会引起各种异常:
修改异常。例如教师t1教三门课程,在关系中就会有三个元组。如果他的地址变了,这三个元组中的地址都要改变。若有一个元组中的地址未更改,就会造成这个教师的地址不惟一,产生不一致现象。
插入异常。如果一个教师刚调来,尚未分派教学任务,那么要将教师的姓名和地址存储到关系中去时,在属性C#和CNAME上就没有值(空值)。在数据库技术中空值的语义是非常复杂的,对带空值元组的检索和操作也十分麻烦。
删除异常。,那么就要把这个教师的元组删去,同时也把t3的地址信息从表中删去了。这是一种不合适的现象。
Date
6
关系模式的冗余和异常问题(三)
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
关系模式分解的实例
(a) 关系模式R1的实例
(b ) 关系模式R2的实例
Date
7
函数依赖的定义(一)
设有关系模式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)中成立。
Date
8
函数依赖的定义(二)
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
关系模式R 的两个关系
Date
9
函数依赖的定义(三)
有一个关于学生选课、教师任课的关系模式:
R(S#,SNAME,C#,AME,TNAME,TAGE)
属性分别表示学生学号、姓名、选修课程的课程号、成绩、课程名、任课教师姓名和年龄等意义。
如果规定,每个学号只能有一个学生姓名,每个课程号只能决定一门课程,那么可写成下列FD形式:
S#→SNAME C#→CNAME
每个学生每学一门课程,有一个成绩,那么可写出下列FD:
(S#,C#)→GRADE
还