文档库 最新最全的文档下载
当前位置:文档库 › 第3章 关系数据库设计理论

第3章 关系数据库设计理论

第3章 关系数据库设计理论
前面已经讨论了关系数据库系统的一般概念,介绍了关系数据库的基本概念、关系模型的三个部分,但是还有一个很基本的问题尚未涉及。针对一个具体问题,应该如何构造一个适合于它的数据模式,即应该构造几个关系模式,每个关系由哪些属性组成等。这是数据库设计的问题,确切地讲是关系数据库逻辑设计问题。
实际上设计任何一种数据库应用系统,不论是层次的、网状的还是关系的,都会遇到如何构造合适的数据模式即逻辑结构的问题。由于关系模型有严格的数学理论基础,并且可以向别的数据模型转换,因此,人们就以关系模型为背景来讨论这个问题,形成了数据库逻辑设计的一个有力工具--关系数据库的规范化理论。规范化理论虽然是以关系模型为背景,但是它对于一般的数据库逻辑设计同样具有理论上的意义。
现实世界随着时间在不断地变化,因而在不同的时刻,关系模式的关系也会有所变化。但是,现实世界的许多已有事实限定了关系模式所有可能的关系必须满足一定的完整性约束条件。这些约束或者通过对属性取值范围的限定,或者通过属性值间的相互关连(主要体现于值的相等与否)反映出来。后者称为数据依赖,它是数据模式设计的关键,关系模式应当刻划这些完整性约束条件。
4.1 函数依赖
一、数据依赖
属性之间的联系称为数据依赖。
其中有两种最重要的数据依赖,函数依赖和多值依赖。
1.属性之间的关系
(1) 1:1的关系
对于两个属性A和B,A属性与B属性的取值是一一对应的。例如学号和学生姓名。如果姓名是唯一的,则它们之间的关系是1:1的关系。
(2) 1:m(1 to many)的关系
若两个属性集合A和B,A中的值只与B中某个值相关,而B的一个取值与A中多个值相对应。例如,班级和学生的关系。
(3) m:m(m to many)的关系
一个实体的两个属性集中任何一个值都与另一个属性集中多个值相对应。例如,学生号与课程号之间,任何一个学生可以选多门课程,任何一个课程可以由多个学生选择。
二、函数依赖
对于关系两个属性A和B,若A中每一个取值,都有B中唯一的值与之对应,则称B函数依赖于A,也可以说A决定B。A→B
例如,学号和班级,学号→班级。学号决定班级,班级函数依赖于学号。
三、函数依赖和属性的关系
我们在前面讨论的三种关系,并不是每一种关系都存在函数依赖,设有一个关系R,存在两个属性A和B。则有下列的规则:
(1) 若A和B之间是 1:1的关系,则有A→B和B→A,即A和B相互依赖。
(2) 若A和B之间是m:1的关系,则有

函数依赖A→B。
(3)若A和B之间是m:m的关系,则有不存在函数依赖。
如学生关系,可有学号(SNO),姓名(SNAME),系名(SDEPT)等几个属性。
由于一个学号只对应一个学生,一个学生只在一个系学习。因而当"学号"值确定之后,姓名和该生所在系的值也就被唯一地确定了。
就象自变量x确定之后,相应的函数值f(x)也就唯一地确定了一样,我们说SNO函数决定SNAME和SDEPT,或者说SNAME,SDEPT函数依赖于SNO,记为∶
SNO→SNAME
SNO→SDEPT

例如:现在要建立一个数据库来描述学生的一些情况,面临的对象有;学生(用学号SNO描述),系(系名SDEPT描述),系负责入(用其姓名MN描述),课程(用课程名CNAME描述)和成绩(GRADE)。于是得到一组属性。
U = { Sno,Sdept,Mname,Cname,Grade }
现实世界的已知事实告诉我们∶
(1)一个系有若干学生,但一个学生只属于一个系;
(2)一个系只有一名(正职)负责人;
(3)一个学生可选修多门课程,每门课程有若干学生选修;
(3) 每个学生学习每一门课程有一个成绩;
于是得到U上的一组函数依赖:
F = { Sno→Sdept,Sdept→Mname,(Sno,Cname)→Grade }

我们就得到了一个描述学校的数据库模式S〈U,F〉:
U = { Sno,Sdept,Mname,Cname,Grade }
F = { Sno→Sdept,Sdept→Mname,(Sno,Cname)→Grade }


4.2关系的规范化
设计一个的关系数据库,首先要定义一组关系,这组关系定义的好,系统的性能就好,定义的差,系统的性能就差。一般的设计原则是:
(1) 数据的冗余度尽量低。
(2) 不出现插入、删除等操作异常;
(3) 能尽量如实反映现实世界的实际情况,而且又易懂。
这些原则要求关系数据库中的关系应满足一定的要求。我们把满足不同要求的关系称为范式。又按照要求条件的宽严的不同逐级分为第一范式、第二范式、第三范式等,并用1NF、2NF、3NF表示。
下面看几个关系:
产品关系:
品名 单价 批发价 零售价 铅笔 0.8 1.0





学生选课关系
学号
SNO 学生姓名sname 年龄
sage 系
dept 系主任
mn 课程号
CNO 课程名
kname 成绩
score 2001 李样 18 8901 李红军 101 数据库 90 2001 李样 18 8901 李红军 102 专家系统 80 2002 万蓬 18 8902 李红 101 数据库 80 2003 万蓬 18 8902 李红 102 专家系统 80 学生选课存在如下几个问题:
(1)如果一个系刚成立还没有学生,或学生还没有安排课程,则无法将这个系的信息存入数据库,称为插入异常;
(2)如果一个系的学生全都毕业了,需要删除学生及学生选课信息,但同时也将该系的信息删除了,这称为删除异常;
(3)该关系中有一个学生选课,相关系的信息就要存

储一次,冗余太大,容易造成系及系的负责人信息的不一致。
上述问题的出现是因为在学生关系中存在数据依赖。该关系的关键字是SNO+CNO,但属性dept(所属系)和mn(系主任)仅与SNO(学号)有关,而与cno(课程号)无关,即DEPT和MN仅函数依赖于属性SNO。
因此,要设计出一个好的数据库,必须先要搞清楚属性间的数据依赖关系。
要求关系数据库中的关系应满足一定的要求。我们把满足不同要求的关系称为范式。又按照要求条件的宽严的不同逐级分为第一范式、第二范式、第三范式、BC范式等,并用1NF、2NF、3NF、BCNF表示。
关系的规范化,就是将一个低一级的范式,转化为一组高一级范式的过程。这种转化过程就是关系的规范化。


1. 第一范式(1NF)
关系中每一个属性都是原子属性,就是说关系中不允许出现重复的属性,关系中的每个分量必须是不可分割的。

例 如下是一个通讯地址表addr,若要求按城市检索,则addr表应该表示为addr¢(姓名,城市,街道)。如下的表为非1NF的关系。
addr ( 姓 名 地 址 )
李小明 北京市白石桥路7号
张 亮 天津市和平街18号
王国全 太原市解放路35号
苏 丹 北京市复外大街12号

addr ( 姓 名 城市 街道 )
李小明 北京市 白石桥路7号
张 亮 天津市 和平街18号
王国全 太原市 解放路35号
苏 丹 北京市 复外大街12号
2. 第二范式(2NF)
定义 关系满足1NF,同时,关系的每一个非主属性都完全函数依赖于主关键字。
一个关系模式R不属于2NF,就会产生以下几个问题:
1.插入异常
2.删除异常
3.修改复杂
例如刚才学生选课关系就满足1NF,不满足2NF。属性dept(所属系)和mn(系主任)仅与SNO(学号)有关,而与cno(课程号)无关,即DEPT和MN仅函数依赖于属性SNO。
课程名CNAME与课程号CNO有关,与学号SNO无关。
学号和课程号惟一决定了成绩。
学号
SNO 学生姓名sname 年龄
sage 系
dept 系主任
mn 课程号
CNO 课程名
kname 成绩
score 2001 李样 18 8901 李红军 101 数据库 90 2001 李样 18 8901 李红军 102 专家系统 80 2002 万蓬 18 8902 李红 101 数据库 80 2003 万蓬 18 8902 李红 102 专家系统 80




按照关键字进行分解进行关系的分解
学生关系
学号
SNO 学生姓名sname 年龄
sage 系
dept 系主任
mn 2001 李样 18 8901 李红军 2002 万蓬 1

8 8902 李红
学生选课
学号
SNO 课程号
CNO 成绩
score 2001 101 90 2001 102 80 2002 101 80 2003 102 80
课程关系
课程号
CNO 课程名
kname 101 数据库 102 专家系统
3.第三范式 3NF
定义 关系满足2NF,同时,关系的每一个非主属性都不传递依赖于主关键字。
一个关系R若不是3NF就会产生与2NF相类似的问题。
在分解后的学生关系中,系主任传递依赖于学号(SNO)



系关系

dept 系主任
mn 8901 李红军 8902 李红 学生关系
学号
SNO 学生姓名sname 年龄
sage 系
dept 2001 李样 18 8901 2002 万蓬 18 8902
学生选课关系
学号
SNO 课程号
CNO 成绩
score 2001 101 90 2001 102 80 2002 101 80 2003 102 80



课程关系
课程号
CNO 课程名
kname 101 数据库 102 专家系统




1



相关文档