这里多值依赖的定义是:R为一关系模式,U为R的全体属性,其中X和Y均为U的不相交子集。若R的任何一个关系r,对于x的给一定值,Y就有一组值与之对应。而Y的这组值不以任何形式与u_x-Y中的属性相关,则称Y多值依赖于X,记作 卜’—◆Y。 实际上上述两种范式是对于3NF层次更高,BCNF除了对非主属性提出了函数依赖的要求,而且对所有的候选关键字也相应提出要求,即在候选关键字中也不允许存在部分函数依赖和传递依赖的情况发生。 我们看一个例子,关系模式STC s#,T#,c# ,其中S#表示学生号,T#表示教师号.c#表示课程号.每一教师只教一门课,每门课有若干个老师。对于每--I"7课程, 14学习该课程的每~个学生只由一位教师讲授。由语义可得到以下的函数依赖关系: S#,C# ◆T#. S#,T# ◆C#, T#—◆C#。 这里 s#,C# 和 S#,T# 都是候选关键字,显然这个例子中该模式是3NF, 冈为没有任何非关键字属性对关键字传递依赖或部分依赖。但是该模式不是BCNF,因为T是决定因素,而T本身却不是关键字。 在这个关系模式中,如果我们删去某一个学生的元组,那么同时也将失去教师讲授某~fJ课程的信息。
而我们可以将该关系模式进行投影分解成SC s#,c# 和TC T#,c# ,这样就不会出现上述的种种弊端了。 关于4NF的情况。我们可以来看下面的一个例子,在学校中,--I"1课程能够由一缃老师中的一位来教授,该老师能够使用一组教材中的任一种。即如下表所示 CTX CTX C# T# X# C拌 W X存 Cl Tl Xl C】 T】 X】 T2 X2 C1 T1 X2 T3 C2 T4 X3 C1 亿 XI X4 Cl T2 X2 Cl T3 X1 C】 T3 X2 C2 T4 X3 C2 T4 X4 其中C#,T#,x#分别表示课程号、教师号和教材号,将它规范以后就如上图的右圈所示。 该关系模式的关键字是 C#,T#,x# .显然它是一个3NF,也是BCNF,因为在这个关系模式中没有非主属性。三个属性之间没有函数依赖。 可以看出,当课程要增加一种教材x5时,那就必须插入 C1,T1,X5 平¨ El,T2,X5 两个元组。同样,当教师T1调走时,就要删除 C1,T1,X1 和 el,T2,X5 两个元组,数据冗余十分明显且插入、删除、修改工作量很大。 造成上述问题的原因就在于cYx关系模式中存在多值依赖的情况。
c#,T#,x辑分别与x,Y,U-X-Y对应。对于c#的一给定值,都有T#的一组值与之对应,而这组T#仅依赖于c#的确定,而不依赖于x#的值,因此T#多值依赖于c#,即c#—’—◆T#。 在这种情况下,我们也可以通过投影分解的办法将cTx分解成CT c#,Tg 和cx c#,x# ,则模式cT和cx都是4NF。2.5 小结 关系模式设计的好坏将直接影响到数据的冗余度,数据的一致性和数据丢失等问题。要设计好的模式,其基础是关于属性之间的函数依赖性;而属性之间的函数依赖性,则决定于属性之间的语义含义。作为设计者必须正确周到地理解和描述这些语义所包含的意思,而不能由具体关系中元组属性值而匆匆作出决定,这点对于的设计者来说至关重要。 在关系中,对关系的基本要求是满足第一范式。这样的关系模式就是合法的、允许的;但是人们发现有些关系模式存在数据冗余、存储操作异常等问题,在我们寻求解决问题办法的同时,就是规范化的过程。 芙系模式的规范化的过程就是采用投影分解的办法来实现的,.把低一级的关系模式化为若干个高一级的关系模式,这种投影分解不是唯一的,应注意的是必须保证它往分解前和分解后具有等价性,分解后得到的模式应能更好地反映客观实体。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-37192-11.html
你还骂人家
必须给他弄沉
让他上哪儿去抓蛆