7数据库设计.doc
文本预览下载声明
数据库设计
英语单词
单词 释义 函数依赖
我们知道现在一个大型的软件项目基本都有一个后台数据库,这个后台数据库设计的优劣,直接影响到该项目性能。如何设计一个良好的数据库,便是首要解决的问题。在举例说明之前,先明白这几个概念:
关系模式 R(U,F) R:关系名,U:属性组,F:数据依赖。
数据依赖:包括函数依赖和多值依赖(暂不考虑)。
函数依赖:设R(U)是属性集U上的关系模式。X,Y是U的子集。若对于R(U)的任一个可能关系R,R中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不同,则称X函数确定Y或Y函数依赖于X,记做X→Y.
X →Y ,但Y不属于X,则称X→Y是非平凡的函数依赖。
X→Y,但Y属于X,则称X-Y是平凡的函数依赖。
X→Y,Y→X 可以记为:X←→Y,称作X,Y相互函数依赖。
如果X→Y ,并且对于X的任一个真子集X’, Y 不函数依赖于X’,则称Y对X的完全函数依赖。
如果X→Y,但Y不完全函数依赖于X,则称Y对X的部分依赖。
在R(U)中,如果X→Y,Y不属于X,Y不决定X,Y→Z,Z不属于Y,则称Z对X的传递函数依赖。
设K为RU,F中的属性和属性组合,若U完全函数依赖于K,则K为R的候选码。若候选码(Candidate Key)多于一个,则选定其中一个为主码(Primary Key)。
包含在任何一个候选码中的属性,称为主属性(Prime attribute)。不包含在任何码中属性称为非主属性,或非码属性。最简单的情况,单个属性是码。最极端的情况,整个属性组是码,称为全码。
关系模式R中属性或属性组并非R的码,但X是另一个关系模式的码,则称X是R的外部码(Foreign Key),也称外码。
比如描述一个学生的关系,可以有学号,姓名,系名等几个属性。一个学号只对应一个学生,一个学生只在一个系学习。因此学号确定好以后,学生的姓名和所在系的值也就唯一确定了。属性间的这种关系类似于数学中的函数y=f(x)。类似的有:Sname=f(Sno), Sdept=f(Sno); 也可记做:Sno→Sname, Sno→Sdept。
现在来看这个列子:一个描述学校教务的数据库,该数据库涉及的对象有学生的学号(Sno), 所在系(Sdept),系主任姓名(Mname),课程号(Cno)和成绩(Grade)。假设用一个单一的关系模式Student来表示,则该关系模式的属性集合为:U={Sno,Sdept,Mname,Cno,Grade} F={Sno→Sdept, Sdept→Mname,(Sno,Cno)→Grade}
这个关系模式存在以下问题:数据冗余太大;更新异常;插入异常;删除异常。怎么办?----规范化
范式理论
范式理论是数据库设计的一种理论基础和指南。它不仅能够作为数据库设计优劣的判断标准,而且还可以预测数据库系统可能出现的问题。范式是符合某一种级别的关系模式的集合。目前关系数据库有6种范式,即:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、BCNF、第四范式(4NF)和第五范式(5NF)。
要求最低的范式是第一范式,在第一范式的基础上满足更多的要求称为第二范式,其余范式依次类推。一般说来数据库只需要满足第三范式就可以了。
第一范式:每一个分量必须是不可分的数据项
第一范式是第二范式和第三范式的基础,是最基本的范式。所谓第一范式(1NF)是指数据库表的每一列都是不可再分割的基本数据项,同一列不能有多个值,即实体中的某个属性不能有多个值或不能有重复的属性。如果出现重复的属性,就需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式中表的每一行只包含一个实体的信息。通俗的讲,第一范式就是要求表中不能有表。
刚才的例子中,函数依赖有:
这种关系模式是满足第一范式的,但还是有这样的缺点:
插入异常。假设要插入一个学生Sno=S7, Sdept=“软件工程系”,Sloc=“B2”,但该学生没有选课,即这个学生无Cno,这样的元组就插不进S-L-C中,因为插入元组时必须给定码值,而这时的码值得一部分为空,因而学生的固有信息无法插入。
删除异常。假定某个学生只选了一门课,如S4就选了一门课C3。现在C3这门课他也不选了,那么C3这个数据项就要被删除。而C3是主属性,删除了C3,整个元组就必须跟着删除,使得S4的其他信息也被删除,从而造成删除异常,即不应该删除的信息也被删除了。
修改复杂。某个学生从数学系MA转到计算机科学系,这本来只需要修改此学生元组的Sdept分量。但因为关系模式S-L-C中还含有系的住处Sloc属性,学生转系将同时改变住处,因而还必须修改元组的Sloc分量。另外,如果这个学
显示全部