《它就是规范化的关系,但这只是最基本的规范化规范化程.ppt》由会员分享,可在线阅读,更多相关《它就是规范化的关系,但这只是最基本的规范化规范化程.ppt(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、一个关系只要其分量都是不可分的数据项,它就是规范化的关系,但这只是最基本的规范化。规范化程度可心有6个不同级别,即6个范式。一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式集合,这种过程就叫关系模式的规范化。 4.3.1 关系模式规范化的步骤 在4.2中已经看到,规范化程度过低的关系不一定能够很好地描述现实世界,可能会存在插入异常、删除异常、修改复杂、数据冗余等问题,解决方法就是对其进行规范化,转换成高级范式。 规范化的基本思想是逐步消除数据依赖中不合适的部分,使模式中的各关系模式达到某种程度的“分离”,即采用“一事一地”的模式设计原则,让一个关系描述一个概念、一个实
2、体或者实体间的一种联系。若多于一个概念就把它“分离”出去。因此所谓规范化实质上是概念的单一化。 关系模式规范化的基本步骤如图4-10所示。 对1NF关系进行投影,消除原关系中非主属性对码的函数依赖,将1NF关系转换为若干个2NF关系。 对2NF关系进行投影,消除原关系中非主属性对码的传递函数依赖,从而产生一组3NF关系。,43 关系模式的规范化,对3NF关系进行投影,消除原关系中主属性对码的部分函数依赖和传递函数依赖(也就是说,使决定属性都成为投影的候选码),得到一组BCNF关系。 1NF 消除非主属性对码的部分函数依赖 消除决定属性 2NF 集非码的非平 消除非主属性对码的传递函数依赖 凡函
3、数依赖 3NF 消除主属性对码的部分和传递函数依赖 BCNF 消除非平凡且非函数依赖的多值依赖 4NF 消除不是由候选码所蕴含的连接依赖 5NF 图4-10 规范化,以上三步也可以合并为一步:对原关系进行投影,消除决定属性不是候选码的任何函数依赖。 对BCNF关系进行投影,消除原关系中非平凡函数依赖的多值依赖,从而产生一组4NF关系。 对4NF关系进行投影,消除原关系中不是由候选码所蕴含的连接依赖,即可得到一组5NF关系。5NF是最终范式。 诚然,规范化程度过低的关系可能会存在插入异常、删除异常、修改复杂、数据冗余等问题,需要对其进行规范化,转换成高级范式。但这并不意味着规范化程度越高的关系模
4、式就越好。在设计数据库模式结构时,必须对现实世界的实际情况和用户应用需求作进一步分析,确定一个合适的、能够反映现实世界的模式。这也就是说,上面的规范化步骤可以在其中任何一步终止。 4.3.2 关系模式的分解 关系模式的规范化过程是通过对关系模式的分解来实现的,但是把低一级的关系模式分解为若干个高一级的关系模式的方法并不是唯一的。在这些分解方法中,只有能够保证分解后的关系模式与原关系模式等价的方法才有意义。,将一个关系模式R分解为若干个关系模式R1,R2,Rn(其中U=U1U2Un ,且不存在 Ui Uj ,Ri为F在Ui上的投影),意味着相应地将存储在一个二维表t中的数据分散以若干个二维表t1
5、 ,t2 , ,tn中去(其中ti是t在Ui上的投影)。 例如,对于222节例子中的关系模式SL(Sno,sdept,Sloc),SL中有下列函数依赖: SnoSdept SdeptSloc SnoSloc 我们已经知道SL2NF,该关系模式存在插入异常、删除异常、数据冗余度大和修改复杂的问题。因此需要分解该关系模式,使成为更高范式的关系模式。分解方法可以有很多种。,假设下面是该关系模式的一个关系: SL 第一种分解方法是将SL分解为下面3个关系模式: SN(Sno) SD(Sdept) SO(Sloc) 分解后的关系为 : SN SD SO,SN,SD,和SO都是规范化程度很高的关系模式(5
6、NF)。但分解后的数据丢失了许多信息,例如,无法查询95001学生所在系或宿舍。因此这种分解方法是不可取的。 如果分解后的关系可以通过自然连接恢复为原来的关系,那么这种分解就没有丢失信息。 第二种分解方法是将SL分解为下面两个关系模式: NL(Sno,Sloc) DL(Sdept,sloc) 分解后的关系为 NL DL,对NL和DL关系进行自然连接的结果为 ND LL ND LL比原来的SL关系多了两个元组(95002,B,PH)和(95005,B,IS)。因此也无法知道原来的SL关系中究竟有哪些元组,从这个意义上说,此分解方法仍然丢失了信息。 第三种分解方法是将SL分解为下面二个关系模式:
7、ND(Sno,Sdept) NL(Sno,Sloc),分解后的关系为 ND DL 对ND和NL关系进行自然连接的结果为 ND NL,它与SL关系完全一样,因此第三种分解方法没有丢失信息。 设关系模式R被分解为若干个关系模式R1,R2,Rn(其中U=U1U2Un ,且不存在 Ui Uj ,Fi为F在Ui上的投影),若R与R1,R2,Rn 自然连接的结果相等,则称关系模式R的这个分解具有无损连接性(lossless join)。只有具有无损连接性的分解才能够保证不丢失信息。 第三种分解方法虽然具有无损连接性,保证了不丢失原关系中的信息,但它并没有解决插入异常、删除异常、修改复杂、数据冗余等问题。例
8、如95001学生由CS系转到IS系,ND关系的(95001,CS)元组和NL关系的(95001,A)元组必须同时进行修改,否则会破坏数据库的一致性。之所以出现上述问题,是因为分解得到的两个关系模式不是互相独立的。SL中的函数依赖SdeptSloc既没有投影到关系模式ND上,也没有投影到关系模式NL上,而是跨在这两个关系模式上。也就是说这种分解方法没有保持原关系中手函数依赖。 设关系模式R被分解为若干个关系模式R1,R2,Rn(其中U=U1U2Un ,且不存在 UiUj ,Fi为F在Ui上的投影),若F所逻辑蕴含的函数依赖一定也由分解得到的某个关系模式中的函数依赖Fi所逻辑蕴含,则称关系模式R的
9、这个分解是保持函数依赖的(preserve dependency)。,第四种分解方法将SL分解为下面二个关系模式: ND(Sno,Sdept) DL(Sdept,sloc) 这种分解方法保持了函数依赖。 判断对关系模式的一个分解是否与原关系模式等价可以有三种不同的标准: 分解具有无损连接性。 分解要保持函数依赖。 分解既要保持函数依赖,又要具有无损连接性。 如果一个分解具有无损连接性,则它能够保证不丢失信息。如果一个分解保持了函数依赖,则它可以减轻或解决各种异常情况。 分解具有无损连接性和分解保持函数依赖是两个互相独立的标准。具有无损连接性的分解不一定能够保持函数依赖。同样,保持函数依赖的分解
10、也不一定具有无损连接性。例如,上面的第一种分解方法既不具有无损连接性,也未保持函数依赖,它不是原关系模式的一个等价分解。第二种分解方法保持了函数依赖,但不具有无损连接性。第三种分解方法具有无损连接性,但未保持函数依赖。第四种分解方法既具有无损连接性,又保持了函数依赖。,规范化理论提供了一套完整的模式分解算法,按照这套算法可以做到: 若要求分解具有无损连接性,那么模式分解一定能够达到4NF。 若要求分解保持函数依赖,那么模式分解一定能够达到3NF,但不一定能够达到BCNF。 若要求分解既具有无损连接性,又保持函数依赖,则模式分解一定能够达到3NF,但不一定能够达到BCNF。 关于模式分解的具体算法我们就不具体讨论了,有兴趣的读者可参阅有关书籍。,