非淡泊无以明志,非宁静无以致远
全部博文(408)
分类: 数据库开发技术
2010-03-18 22:55:26
1.第一范式(1NF)
定义1:如果关系模式R中不包含多值属性,则R满足第一范式(First Normal Form),记作:
R∈1NF
1NF是对关系的最低要求,不满足1NF的关系是非规范化的关系。
2.第二范式(2NF)
定义1:设X、Y是关系R的两个不同的属性或属性组,且X → Y。如果存在X的某一个真子集X’,使X’ → Y成立,则称Y部分函数依赖于X,记作:X P→ Y(Partial)。反之,则称Y完全函数依赖于X,记作:X F→ Y (Full)
定义2:如果一个关系 R∈1NF,且它的所有非主属性都完全函数依赖于R的任一候选码,则R属于第二范式,记作:R∈2NF。
说明:上述定义中所谓的候选码也包括主码,因为码首先应是候选码,才可以被指定为码。
例如关系模式:
职工(职工号,姓名,职称,项目号,项目名称,项目角色)中
(职工号,项目号)是该关系的码,而职工号→姓名、职工号→职称、项目号→项目名称…
所以(职工号,项目号)P→ 职称、(职工号,项目号)P→ 项目名称
故上述职工关系不符合第二范式要求。它存在三个问题:插入异常、删除异常和修改异常。
其中修改异常是这样的,当职工关系中项目名称发生变化时,由于参与该项目的人员很多,每人一条记录,要修改项目信息,就得对每一个参加该项目的人员信息进行修改,加大了工作量,还有可能发生遗漏,存在着数据一致性被破坏的可能。
可把上述职工关系分解成如下三个关系:
职工(职工号,姓名,职称)
参与项目(职工号,项目号,项目角色)
项目(项目号,项目名称)
上述三个关系都符合定义2的要求,所以都符合2NF
推论:如果关系模式R∈1NF,且它的每一个候选码都是单码,则R∈2NF
符合第二范式的关系模式仍可能存在数据冗余、更新异常等问题。如关系
职工信息(职工号,姓名,职称,系名,系办地址)
虽然也符合2NF,但当某个系中有100名职工时,元组中的系办地址就要重复100次,存在着较高的数据冗余。原因是关系中,系办地址不是直接函数依赖于职工号,而是因为职工号函数决定系名,而系名函数决定系办地址,才使得系办地址函数依赖于职工号,这种依赖是一个传递依赖的过程。
所以,上述职工信息的关系模式还需要进一步的规范化。
3.第三范式(3NF)
定义1:在关系R中,X、Y、Z是R的三个不同的属性或属性组,如果X→Y,Y→Z, 但Y→X,且Y不是X的子集,则称Z传递函数依赖于X。
定义2:如果关系模式R∈2NF,且它的每一个非主属性都不传递依赖于任何候选码,则称R是第三范式,记作:R∈3NF
推论1:如果关系模式R∈1NF,且它的每一个非主属性既不部分依赖、也不传递依赖于任何候选码,则R∈3NF
推论2:不存非主属性的关系模式一定为3NF
4.改进的3NF——BCNF(Boyee-Codd Normal Form)
定义:设关系模式R(U,F)∈1NF,若F的任一函数依赖X→Y(Y X)中X都包含了R的一个码,则称R∈BCNF。
换言之,在关系模式R中,如果每一个函数依赖的决定因素都包含码,则R∈BCNF
推论:如果R∈BCNF,则:
Ø R中所有非主属性对每一个码都是完全函数依赖;
Ø R中所有主属性对每一个不包含它的码,都是完全函数依赖;
Ø R中没有任何属性完全函数依赖于非码的任何一组属性。
定理:如果R∈BCNF,则R∈3NF一定成立。
证明:(结合传递依赖的定义,用反证法)
注意:当R∈3NF时,R未必属于BCNF。因为3NF比BCNF放宽了一个限制,它允许决定因素不包含码。例如:
通讯(城市名,街道名,邮政编码)中:
F={(城市名,街道名)→邮政编码,邮政编码→城市名}
非主属性邮政编码完全函数依赖于码,且无传递依赖,故属于3NF,但邮政编码也是一个决定因素,而且它没有包含码,所以该关系不属于BCNF。
又如:
Teaching(Student,Teacher,Course) 简记为Teaching(S,T,C)
规定:一个教师只能教一门课,每门课程可由多个教师讲授;学生一旦选定某门课程,教师就相应地固定。
F={T→C,(S,C)→T,(S,T) →C}
该关系的候选码是(S,C)和(S,T),因此,三个属性都是主属性,由于不存在非主属性,该关系一定是3NF。但由于决定因素T没包含码,故它不是BCNF。
关系模式Teaching仍然存在着数据冗余问题,因为存在着主属性对码的部分函数依赖问题。
确切地表示:F={T→C,(S,C)P→T,(S,T) P→C}
所以Teaching关系可以分解为以下两个BCNF关系模式:
Teacher(Teacher,Course) Student(Student,Teacher)
3NF的“不彻底”性,表现在可能存在主属性对码的部分依赖和传递依赖。
一个关系模式如果达到了BCNF,那么,在函数依赖范围内,它就已经实现了彻底的分离,消除了数据冗余、插入和删除异常。