规范化(3)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
关系模式的规范化
教学目标:让学生掌握关系模式的规范化;
教学重难点:规范化
教学工具:多媒体教室
课时安排:2课时
教学方法:讲授法、练习法
教学过程:
导入语:上节课我们已经学习了范式,那么今天我们就来进行关系模式的规范化学习
4.4 关系模式的规范化
到目前为止,规范化理论已经提出了三类范式(有关4NF和5NF的内容不再详细介绍)。
各范式级别是在分析函数依赖条件下对关系模式分离程度的一种测度,范式级别可以逐级升高。
一个低一级范式的关系模式,通过模式分解转化为若干个高一级范式的关系模式的集合,这种分解过程叫作关系模式的规范化(Normalization)。
4.4.1 关系模式规范化的目的和原则
一个关系只要其分量都是不可分的数据项,就可称作规范化的关系,但这只是最基本的规范化。
这样的关系模式是合法的。
但人们发现有些关系模式存在插入、删除、修改异常、数据冗余等弊病。
规范化的目的就是使结构合理,消除存储异常,使数据冗余尽量小,便于插入、删除和更新
规范化的基本原则就是遵从概念单一化“一事一地”的原则,即一个关系只描述一个实体或者实体间的联系。
若多于一个实体,就把它“分离”出来。
因此,所谓规范化,实质上是概念的单一化,即一个关系表示一个实体。
4.4.2 关系模式规范化的步骤
规范化就是对原关系进行投影,消除决定属性不是候选键的任何函数依赖。具体可以分为以下几步:
1.对1NF关系进行投影,消除原关系中非主属性对键的部分函数依赖,将1NF关系转换成若干个2NF关系。
2.对2NF关系进行投影,消除原关系中非主属性对键的传递函数依赖,将2NF关系转换成若干个3NF关系。
3.对3NF关系进行投影,消除原关系中主属性对键的部分函数依赖和传递函数依赖,也就是说使决定因素都包含一个候选键。得到一组BCNF关系
关系规范化的基本步骤如图4.17所示
一般情况下,我们说没有异常弊病的数据库设计是好的数据库设计,一个不好的关系模式也总是可以通过分解转换成好的关系模式的集合。
但是在分解时要全面衡量,综合考虑,视实际情况而定。
对于那些只要求查询而不要求插入、删除等操作的系统,几种异常现象的存在并不影响数据库的操作。这时便不宜过度分解,否则当要对整体查询时,需要更多的多表连接操作,这有可能得不偿失。
在实际应用中,最有价值的是3NF和BCNF,在进行关系模式的设计时,通常分解到3NF就足够了
4.4.2 关系模式规范化的要求
关系模式的规范化过程是通过对关系模式的投影分解来实现的,但是投影分解方法不是唯一的,不同的投影分解会得到不同的结果。
在这些分解方法中,只有能够保证分解后的关系模式与原关系模式等价的方法才是有意义的。
下面先给出两个定义:
无损连接性(Lossless Join):设关系模式R(U,F)被分解为若干个关系模式R1(U1,F1),R2(U2,F2),…, Rn(Un,Fn),其中U=U1U2…UN,且不存在UNUj式,Fi 为F在Uj上的投影,如果R与R1,R2,…,Rn自然连接的结果相等,则称关系模式R的分解具有无损连接性。
函数依赖保持性(Preserve Dependency):设关系模式R(U,F)被分解为若干个关系模式R1(U1,F1),R2(U2,F2),…, Rn(Un,Fn),其中U=U1U2…UN,且不存在UNUj式,Fi为F在Uj上的投影,如果F所蕴含的函数依赖一定也由分解得到的某个关系模式中的函数依赖Fi所蕴含,则称关系模式R的分解具有函数依赖保持性。
判断对关系模式的一个分解是否与原关系模式等价可以有三种不同的标准:
1.分解要具有无损连接性。
2.分解要具有函数依赖保持性。
3.分解既要具有无损连接性,又要具有函数依赖保持性。
例如,对于4.3.2.2中例4.2的关系模式SD(SNO,SN,AGE,DEPT,MN),规范到3NF,可以有以下三种不同的分解方法:
第一种:
S(SNO,SN,AGE,DEPT)
D(DEPT,MN)
SD(SNO,SN,AGE,DEPT,MN)=S[SNO,SN,AGE,DEPT]*D[DEPT,MN], 也就是说,用其两个投影在DEPT上的自然连接可复原关系模式SD。也就是说这种分解具有无损连接性。
对于分解后的关系模式S,有函数依赖SNO→DEPT,对于D,有函数依赖DEPT →MN,这种分解方法保持了原来的SD中的两个完全函数依赖SNO→DEPT,DEPT →MN。分解既具有无损连接性,又具有函数依赖保持性。
前面已经给出详细的论述,这是一种正确的分解方法。
第二种:
S1(SNO,SN,AGE,DEPT)
D1(SNO,MN)
分解后的关系如图4.18所示。
S1 D1
SNO SN AGE DEPT SNO MN
S1赵亦17计算机S1刘伟
S2钱尔18信息S2王平
S3孙珊20信息S3王平
S4李思21自动化S4刘伟
分解以后,两个关系的主键都为SNO,也不存在非主属性对主键的传递函数依,所以两个关系均属于3NF。
且SD=S1*D1,关系模式SD等于S1和D1在SNO上的自然连接,这种分解也具有无损连接性,保证不丢失原关系中的信息。但这种分解结果,仍然存在着一些问题:1.数据冗余。每个系名和系主任的名字存储的次数等于该系的学生人数。
2.插入异常。当一个新系没有招生时,系主任的名字则无法插入。
3.删除异常。某系学生全部毕业而没有招生时,要删除全部学生的记录,两个关系都要涉及,有关该系的信息将被删除。
4.更新异常。更换系主任时,需改动较多的学生记录。另外,某个学生要转系,还必须修改两个关系。
之所以存在上述问题,是因为分解得到的两个关系模式不是相互独立的。
SD中的函数依赖DEPT→MN既没有投影到关系模式S1上,也没有投影到关系模式D1上,而是跨在这两个关系模式上,也就是说这种分解方法没有保持原关系中的函数依赖,却用了原关系隐含的传递函数依赖SNO MN。
分解只具有无损连接性,而不具有函数依赖保持性。
因此,“弊病”仍然没有解决。
第三种:
S2(SNO,SN,AGE,MN)
D2(DEPT,MN)
分解后的关系如图4.19所示。
S2 D2