我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:刘伯温论坛 > 非主属性 >

在线等关系数据库规范化理论

归档日期:05-14       文本归类:非主属性      文章编辑:爱尚语录

  有一个关系模式-教学[教师编号,教师名字,教师职称.课程编号,课程名,学生编号,学生姓名,学生年龄,性别,成绩]有关语义;一个教师只能上一门课,一门课可以由多个教师任课,一个学生可以选修...

  有一个关系模式-教学[教师编号,教师名字,教师职称.课程编号,课程名,学生编号,学生姓名,学生年龄,性别,成绩]

  有关语义;一个教师只能上一门课,一门课可以由多个教师任课,一个学生可以选修多门课程,一门课程可以被多个学生选修,利用规范化理论规范这个关系模式...展开我来答

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  展开全部8.2 规范化理论关系数据库中关系规范化问题在1970年Godd提出关系模型时就同时被提出来,关系规范化可按属性间不同的依赖程度分为第一范式,第二范式,第三范式,Boyce-Codd范式以及第四范式.人们对规范化的认识是有一个过程的,在1970年时已发现属性间的函数依赖关系,从而定义了与函数依赖关系有关的第一,第二,第三,及Boyce-Codd范式.在1976~1978年间,Fagin,Delobe以及Zanjolo发现了多值依赖关系,从而定义了与多值依赖有关的第四范式.范式的定义与属性间的依赖关系的发现有密切关系,在本节中我们介绍函数依赖与多值依赖这两个概念,并在此基础上定义第一范式,第二范式,第三范式,Boyce-Codd范式以及第四范式.8.2.1 函数依赖函数依赖(functional dependency)是关系模式内属性间最常见的一种依赖关系,例如在关系模式S中,S#与Sd间有一种依赖关系.即S#的值一经确定后Sd的值也随之唯一地确定了,此时即称S#函数决定Sd或称Sd函数依赖于S#,它可用下面符号表示:

  但是关系模式SC中的S#与G间则没有函数依赖关系,因为一个确定的学号S#可以允许有多个成绩(它们分别对应于不同的课程),因此成绩G并不能唯一地确定,但是(S#,C#)与G间则存在着函数依赖关系,即有:

  函数依赖这个概念是属语义范畴的,我们只能根据语义确定属性间是否存在这种依赖,此外别无它法可循.

  定义8-1 设有关系模式R ( U ),X,Y是U的子集,若对于任一个关系R中的任一元组在X中的属性值确定后则在Y中的属性值必确定,则称Y函数依赖于X或称X函数决定Y, 并记作X→Y,而其中X称为决定因素,Y称为依赖因素.对于函数依赖,我们一般总是使用一种叫非平凡的函数依赖,在本章中如无特殊声明,凡提到函数依赖时总认为指的是非平凡的函数依赖.下面我们对非平凡函数依赖下一个定义.

  定义8-2 一个函数依赖关系X→Y如满足Y(X,则称此函数依赖是非平凡的函数依赖.

  为了对函数依赖作深人研究,也为了规范化的需要,我们还得引入几种不同类型的函数依赖.

  首先;引入一种完全函数依赖的概念,这个概念为真正的函数依赖打下基础.例如在S申我们有S#→Sd,因而我们同样也会有:

  而其他两种函数依赖都是由它派生而成的,即是说在函数依赖中真正起作用的是S#,而不是Sn或Sa等.这样,我们在研究函数依赖时要区别这两种不同类型的函数依赖,前一种叫完全函数依赖,而后一种叫不完全函数依赖.

  定义8-3 R( U )中如有X,Y(U,满足X→Y且对任何X的线;,则称Y完全函数依赖于X并记作:

  定义8-4 在R( U )中如有X,Y(U且满足X→Y,但Y不完全函数依赖于X,则称Y部分依赖于X,并记作:

  由上所述可知,Sd完全函数依赖于S#,但Sd不完全函数依赖于(S#,Sn),亦即有:

  在函数依赖中还要区别直接函数依赖与间接函数依赖这两个不同的概念,例如S#→Sd中Sd是直接函数依赖于S#,但如果在属性中尚有系的电话号码DT(假如每个系有唯一的一个电话号码),则有:Sd→DT,从而由S#→Sd及Sd→DT可得到:

  在这个函数依赖中,DT并不直接函数依赖于S#,而是经过中间属性Sd传递而依赖于S#,亦即是DT直接依赖于Sd,而Sd又直接依赖于S#,从而构成了DT依赖于S#.这种函数依赖关系,是一种间接依赖关系,或叫传递依赖关系.我们可以对它定义如下.

  注意,在这里传递函数依赖与非传递函数依赖仅作概念上区别, 在形式表示上不作任何区别,即Z传递函数依赖于X或Z非传递函数依赖于X都用X→Z表示,这样做的目的也是为了从全局考虑使得表示尽量简单与方便.

  定义了几种不同的函数依赖关系后,我们在此基础上继续定义一些十分重要的基本概念.即有关关键字(keY)的一些概念.

  一个关系模式可以有若干个关键字,我们在使用中选取其中的一个就够了,这个被选中的关键字叫做这个关系模式的主关键字(Prime key),而一般的关键字叫候选关键字(candidate key).

  在关系模式S,C,SC中,S的关键字是S#,C的关键字是C#,而SC的关键字是(S#,C#),因为我们有:

  在一个关系模式中,所有关键字中的属性构成一个集合,而所有其余的属性则构成另一个集合,这两个集合分别叫做这个关系模式的主属性集与非主属性集.主属性集中的属性叫做主属性(prime attribute),非主属性集中的属性则叫非主属性(nonprime attribute).例如在关系模式S (S#,Sn,Sd,Sa)中, 主属性集为:

  定义8-7 R ( U )中所有关键字中的属性构成的集合P称为R(U )的主属性集.

  定义8-8 在R ( U )中所有非关键字中的属性构成的集合N称为R(U)的非主属性集.以上建立了一系列与函数依赖有关的概念,有了它们后就可以讨论与函数依赖有关的几

  个范式,它们是第一范式,第二范式及第三范式(实际上第一范式与所有依赖均无关,但为叙述方便起见,可视为与函数依赖有关).至于函数依赖的有关理论的探讨,将在本章稍后部分再作详细介绍.

  在这节中我们讨论四种范式,他们是第一范式,第二范式,第三范式以及Boyce-Codd范式.

  先介绍第一范式.第一范式是关系模式所要遵循的基本条件,即关系中的每个属性值均必须是一个不可分割的数据量.如一个关系模式满足此条件则称它属于第一范式(first normal form,或简写成lNF),一个关系模式R如满足第一范式,则可记为R∈lNF.

  第一范式规定了一个关系中的属性值必须是一个不可分割的数据,它排斥了属性值为元组,数组或某种复合数据等的可能性,使关系数据库中的所有关系的属性值均是最简单的,这样可以做到结构简单,讨论方便.一般说来,每个关系模式均要满足第一范式,因为这是对每个关系的最基本要求.

  下面开始讨论真正与函数依赖有关的三个范式.为了讨论这几个范式,我们一般对一个关系模式除了要确定其属性外,还要根据它的语义确定在这个模式上的所有函数依赖.设有关系模式R,它有属性集U,而在它上的函数依赖集是F,则此时一个关系模式可由三元组R,U,F确定,它可以写成为:

  注意,这个表示式仅表示一个三元组而已,它并不表示谓词或关系.例如前面所提到的学生关系模式S,它可表示为:

  又如有一个关系模式叫SCG,它由属性S#,Sn,Sd,Sa, C#, G 组成,其中Ss表示学生所学专业,其他含义同前.在这个关系模式中有一些语义信息,它们是:

  根据上述语义信息以及其他的一些基本常识,我们可以将它们用函数依赖形式表示出来,它们是:

  关系模式有了函数依赖后就可以讨论规范化的问题了.关系中的每一级范式均提出了关系模式所要遵循的约束条件,目的是为了使得关系模式具有较少异常性与较小的冗余度,即是说使关系模式更好一些.

  定义8-9 设有R(U)∈lNF且其每个非主属性完全函数赖于关键字,则称R(U)满足第二范式(可简写为2NF)或写为R∈2NF.

  实际上并不是每个满足第一范式的关系模式必满足第二式,如前面例子中的关系模式SCG即不满足第二范式.这是因在SCG中,它的关键字是(S#,C#),而它的非主属性集是:

  但是Sn,Sd,Ss均并不完全依赖(S#,C#),因此不满足第二范式的条件.

  一个关系模式若满足第二范式,则它必须具有较少异常与较小冗余度.因此,一个关系模式若仅满足第一范式还不够,它必须满足第二范式,其方法是将一个关系模式分解成几个关系模式,使分解后的关系模式能满足第二范式.如关系模式SCG可分解成两个关系模式,它们是:

  模式SCGI与SCG2均满足第二范式,它们均有较少异常与较小冗余度,而SCGl还可以做到无插人与删除异常的出现,而SCG由于不满足第二范式,因此插入异常,删除异常均有存在,且数据冗余度也很大.关于这方面的验证请读者自己去做.

  但是,第二范式还不能完全避免异常现象的出现,如SCG2虽满足第二范式,但仍会出现插入异常与删除异常.如在SCG2中,它有如表8-4所示的模式.

  在这个模式中,如果我们要登记一个尚未招生的系的专业设置情况,要插入这个情况在模式中是较为困难的.这样,如果要删除一些学生,有可能会将有关系的专业设置情况一起删除.究其原因,不外是因为Sd既函数依赖于S#又函数依赖于Ss,同时Ss又函数依赖于S#,并且由此引起了传递函数依赖的出现.因此,看来要消除异常现象,必须使关系模式中无传递函数依赖现象出现,这样就产生了第三范式.

  第三范式要求关系模式首先得满足第二范式,同时每个非主属性都非传递依赖于关键字.由此可以看出,如满足第三范式则每个非主属性既不部分依赖也不传递依赖于关键字.

  定义8-10 若关系模式R(U)的每个非主属性都不部分依赖也不传递依赖于关键字,则称R满足第三范式(可简写为3NF),并记作R∈3NF.

  第三范式将关系模式中的属性分成为两类,一类是非主属性集,另一类是主属性集,而非主属性集的每个属性均完全,不传递依赖于主属性集中的关键字,从而做到在关系模式中理顺了复杂的依赖关系,使依赖单一化与标准化,进而力求达到避免异常性的出现,其示意图可见图8-2,在图中可将关系模式比拟成一个原子,其中主属性集是这个原子的原子核,而非主属性集中的属性则是这个原子中的电子,它们紧紧依赖于主属性集构成一个紧密整体.

  一个关系模式如果不满足第三范式,可以通过模式分解使分解成若干个模式,使分解后的模式能满足第三范式.例如关系模式SCG中,SCG2满足第二范式,但不满足第三范式,此时可将其分解成下面两个模式:

  1972年Boyce,Codd等从另一个角度研究了范式,发现了函数依赖中的决定因素与关键字间的联系与范式有关,从而创立了另一种第三范式,称为Boyce-Codd范式.

  Boyce-Codd范式的大概意思是:如果关系模式中,每个决定因素都是关键字,则满足Boyce-Codd范式.我们知道,一般而言,每个函数依赖中的决定因素不一定都是关键字,因此,只有当R中决定因素都是关键字时才能认为满足Boyce-Codd范式.

  下面一个问题我们需要研究BCNF与3NF间究竟有什么关系 经过仔细研究后,我们认为BCNF比3NF更为严格.下面的定理给出了这个回答.

  这个定理的证明请读者设法自行证得(注:可以用BCNF及3NF的定义而求得).

  这个定理告诉我们:一关系模式满足BCNF者必满足3NF.但是,一关系模式满足3NF是否满足BCNF呢 即是说,定理8-1的充分条件是否成立呢 回答是否定的,即必存在一R(U)满足3NF,但不满足BCNF,这只要用一例即可说明.

  例8-1设有关系模式R(S, C,T),其中S, C含义同前, T表示教师,R有下列语义信息: (1)每个教师仅上一门课;

  这个关系模式满足3NF,因为它的主属性集为(S,C )非主属性集为 (T ),而T完全依赖于(S,C )且不存在传递依赖.但这个关系模式不满足BCNF,因为T是决定因素,但T不是关键字.

  从这个例子中也可以看出,实际上第三范式也避免不了异常性,如某课程本学期不开设,因此就无学生选读,此时有关教师固定开设某课程的信息就无法表示.因此,要避免此种异常性,还需要进一步将关系模式分解成BCNF.如在此例中可将R进一步分解成:

  其示意图如图8-5所示.而R1, R 2则为BCNF,这两个模式均不会产生异常现象.

  从上面所述可以看出,BCNF比3NF更为严格,它将关系模式中的属性分成两类,一类是决定因素集,另一类是非决定因素集.非决定因素集中的属性均完全,不传递地依赖于决定因素集中的每个决定因素.关于这种比喻的一个示意图见图8-6.

  到此为止,由函数依赖所引起的异常现象,只要分解成BCNF即可获得解决.在BCNF中每个关系模式内部的函数依赖均比较单一和有规则,它们紧密依赖而构成一个整体,从而可以避免异现象出现以及冗余量过多的现象.

  我们研究了函数依赖及与它有关的几个范式,但是否关系模式内属性间的依赖关系除函数依赖外就没有其他依赖关系呢 事实并不如此,函数依赖关系是一种较为明显的依赖关系,但是随着人们对关系模式了解越来越深刻后,发现尚有另外的一些依赖系存在,多值依赖就是其中的一种.我们先举一个例子,以说明多值依赖的存在.

  例8-2设有一个课程关系C,它可用表8-5表示.此表表示高等数学这门课的任课教师可以有3个,它的参考书可以有2本;普通物理这门课的任课教师也可以有3个,它的参考书可以有3本.如用关系的形式表示,见表8-6.

  (1)设如R(U)中X与Y有这种依赖关系,则当X的值一经确定后可以有一组Y值与之对应.如确定C为高等数学,则有一组T的值:李华民,王天华,林静与之对应.同样C与L也有类似的依赖.

  (2 ) 当X的值一经确定后,其所对应的一组Y值与U一X一Y无关.如在C中,对应高等数学课的一组教师与此课程的参考书毫无关系,这就表示C与T有这种依赖,则T的值的确定与U一C一T= L无关.

  上述这种依赖显然不是函数依赖,我们称之为多值依赖(multi-valued dependency),如Y多值依赖于X,则可记为X→→Y.

  从上面所描述的多值依赖X→→Y的特点看,其第一个特点表示X与Y的对应关系是很随便的,X的一个值所对应的Y值的个数可不作任何强制性规定,即Y的值可以是从0到任意多个,其主要起强制性约束的是第二个条件,即X所对应的Y取值与U一X一Y无关,说得确切些,如有R(U)且如存在X→→Y,则对R(U)的任何一个关系R,如有元组s,t∈R,有s[X]=t[X](表示s与t在X的投影相等),如将它们在U一X一Y的投影(记为s[U一X一Y], t [U一X一Y],交换后所得元组称为u, v则必有u, v∈R

  定义8-12 设R(U)中有X,Y(U,若对R(U)的任何一个关系,对X的一个确定值,存在Y的一组值与之对应,且Y的这组值又与Z=U一X一Y中的属性值不相关,此时称Y多值依赖于X,并记为X→→Y.

  在多值依赖中若X→→Y且Z=U一X一Y≠O,则称X→→Y为非平凡多值依赖,否则称为平凡多值依赖.

  读者要注意,我们在R(U)中讨论多值依赖时并不意味着R(U)中已不需要讨论函数依赖

  了,恰恰相反,我们一般不仅要在R(U)找出所有多值依赖关系来,而且还要找出所有的函数依赖关系来.因此,一个完整的R(U)应该包含一个函数依赖集F以及一个多值依赖集F,它可以用R(U, F,F)表示.

  前面已经讲过,具有多值依赖的关系,它们的数据冗余量特别大,如何设法减少数据冗余呢 从例8-2中的关系C中可以看出,如果将C(C, T, L)分解成两个关系C1,C2后,它们的冗余度会明显下降.

  从多值依赖的观点看,在C1,C2中各对应一个多值依赖C→→T与C→→L,它们都是平凡多值依赖.因此,在多值依赖时,减少数据冗余的方法是使关系分解成为仅有平凡多值依赖.

  这样,我们就可以规定一个比BCNF更高的范式,它叫第四范式,可简记为4NF.这个范式的特点是,在关系模式中它必须满足:

  定义8-13 R(U)中如果X→→Y是非平凡多值依赖,则X:必含有关键字,此时称R满足第四范式,并记作R∈4NF.

  由这个第四范式定义可以看出,前面所定义的关系C,它虽是BCNF,但不是4NF,因为在C(C, T )中有:

  虽然C∈BCNF,但C不是关键字,所以C(4NF.对它作分解后所产生的C1及C2显然因为C1(C,T)有C→→T,故不存在非平凡多值依赖,因此有C1∈4NF,同理有C2∈4NF.

  我们在规范化讨论中定义了五个范式,对这些范式的认识是逐步深入的.总的说来,我们可以总结成下面几点:

  (2) 规范化的方法:从模式中各属性间的依赖关系(函数依依赖及多值依赖)入手,尽量做到每个模式表示客观世界中的一个事物.

  实际上从第一范式到第四范式的过程是一个不断消除一些依赖关系中的弊病的过程.图8-7给出了这个过程.

  读者应注意的是:规范化是一种理论,它研究如何通过规范以解决异常与冗余现象,在实际数据库设计中构作关系模式时需要考虑到这个因素.但是,客观世界是复杂的,在构作模式时尚需考虑到其他的多种因素,如模式分解过多,势必在数据查询时要用到较多的联结运算,这样就会影响查询速度.因此,在实际构作模式中,需要综合多种正反因素,统一权衡利弊得失,最后构做出一个较为适合实际的模式来.

  属性间的函数依赖与多值依赖是规范化的基本依据,因此有必要对它们作进一步研究,这些研究包括:

  (1)可由关系模式上的一些函数依赖通过一些公理系统(叫Armstrong公理)而获得关系模式上的所有函数依赖.由此可知:一个关系模式上的所有函数依赖可由两部分组成:基础部分是直接由语义获取,其他部分可由公理系统推演而得.

  (2)引入了函数依赖集的等价概念与最小函数依赖集,即如果两函数依赖集能推演出相同的集来,则称它们是等价的,而等价的函数依赖集之最小者称为最小函数依赖集.

  (1)分解后关系中的信息是否会丢失 这叫无损联接性(lossless join).

  若要求满足依赖保持性,则模式分解一定可以达到3NF,但不一定能达到BCNF.

  由于规范化所引起的这两个问题的研究的详细探讨均比较复杂,故本书中不拟详述,仅将结果陈述于上,供读者参考.

  展开全部一个教师只能上一门课,一门课可以由多个教师任课,一个学生可以选修多门课程,一门课程可以被多个学生选修,利用规范化理论规范这个关系模式...教师和课程是一对一的关系课程和教师是一对多的关系学生和课程是多对多的关系

本文链接:http://saltstudios.net/feizhushuxing/352.html