数据库基础1—函数依赖 多值依赖

在数据库知识中有讲到数据库的函数依赖,好几种依赖,希望能进行一下总结:

一、函数依赖(Functional Dependency)的概念

函数依赖是数据依赖的一种,它反映属性或属性组之间相依存,互相制约的关系,即反映现实世界的约束关系。

设R(U)是属性U上的一个关系模式,X和Y均为U={A1,A2,…,An}的子集,r为R的任一关系,如果对于r中的任意两个元组u,v,只要有u[X]=v[X],就有u[Y]=v[Y],则称X函数决定Y,或称Y函数依赖于X,记为X→Y。

 简单的说就是在属性U上有两个子集属性X,Y,由X属性可以获得一个元组,而X属性对应的Y属性获得相同的元组

例:

(sno-学生ID,tno-教师ID,cno-课程ID,sname-学生姓名,tname-教师姓名,cname-课程名称,grade-成绩)
1、sno→sname, cno→cname,(sno,cno)→grade √
2、sname→sno, tno→cno, sno→tname × (不存在一一对应关系) 

  

函数依赖是语义范畴 

1、语义:数据所反映的现实世界事物本质联系
2、根据语义来确定函数依赖性的存在与否
3、函数依赖反映属性之间的一般规律,必须在关系模式下的任一个关系r中都满足约束条件。

 

属性间的联系决定函数依赖关系 

设X、Y均是U的子集
1、X和Y间联系是1:1,则X→Y,Y→X。(相互依赖,可记作X←→Y)
2、X和Y间联系是M:1(M), 则X→Y。
3、X和Y间联系是M:N(M,N),则X、Y间不存在函数依赖。

 

完全函数依赖和部分函数依赖 

1、函数依赖分为完全函数依赖和部分函数依赖

2、定义:
在R(U)中,如果X→Y,并且对于X的任何真子集X'都有X'-/->Y',则称Y完全依赖于X,记作X→Y;否则,如果X→Y,且X中存在一个真子集X',使得X'→Y成立,则称Y部分依赖于X。


例:

学生ID,学生姓名,所修课程ID,课程名称,成绩

(学生ID,所修课程ID)→成绩

成绩既不能单独依赖于学生ID,也不能单独依赖于所修课程ID,因此成绩完全函数依赖于关键字。

(学生ID,所修课程ID)→学生姓名

学生ID→学生姓名

学生姓名可以依赖于关键字的一个主属性——学生ID,因此学生姓名部分函数依赖于(学生ID,所修课程ID)。


平凡函数依赖和非平凡函数依赖 

设X,Y均为某关系上的属性集,且X→Y
1)若Y包含于X,则称X→Y为:平凡函数依赖
2)若Y不包含于X,则称X→Y为:非平凡函数依赖


Y包含于X内,W于X相交,与Y无直接交集。

则:X→Y为平凡函数依赖

    X→W, W→Y为非平凡函数依赖


 函数依赖的逻辑蕴涵

设有关系模式R(U)及其函数依赖集F, 如果对于R的任一个满足F的关系r函数依赖X→Y都成立,
则称F逻辑蕴涵X→Y,或称X→Y可以由F推出。

4.3.1: 
关系模式 R=(A,B,C),函数依赖集F={A→B,B→C}, F逻辑蕴涵A→C。


函数依赖的性质

若U为关系模式R的属性全集,F为U上的一组函数依赖,设X、Y、Z、W均为R的子集,对R(U,F)有:
        F1(自反性):若X≥Y(表X包含Y),则X→Y为F所蕴涵;(F1':X→X) 
        F2(增广性): 若X→Y为F所蕴涵,则XZ→YZ为F所蕴涵;(F2':XZ→Y) 
        F3(传递性): 若X→Y,Y→Z为F所蕴涵,则X→Z为F所蕴涵; 

        F4(伪增性):若X→Y,W≥Z(表W包含Z)为F所蕴涵,则XW→YZ为F所蕴涵; 
        F5(伪传性): 若X→Y,YW→Z为F所蕴涵, 则XW→Z为F所蕴涵; 

        F6(合成性): 若X→Y,X→Z为F所蕴涵,则X→YZ为F所蕴涵; 
        F7(分解性): 若X→Y,Z≤Y (表Z包含于Y)为F所蕴涵,则X→Z为F所蕴涵。 

        函数依赖推理规则F1∽F7都是正确的。



多值依赖的定义:

      设R(U)是一个属性集合U上的一个关系模式,X, Y, 和Z是U的子集,并且Z=U-X-Y,多值依赖X->->Y成立当且仅当对R的任一个关系r,r在(X,Z)上的每个值对应一Y的值,这组值仅仅决定于X值而与Z值无关。

      若X->->Y,而Z=空集,则称X->->Y为平凡的多值依赖。否则,称X->->Y为非平凡的多值依赖


平凡多值依赖就是,属性集合中分为两个真子集,每一个X对应一组Y的取值

可以看出,如果把上面的一改为一,那么多值依赖就变成了函数依赖。当然一个值组成的组也是组,所以说,函数依赖是多值依赖的特殊情况。

如下表:

 

                    课程C                                   教师T                              参考书B

                    数学                                      邓军                                数学分析

                    数学                                      邓军                                高等代数

                    数学                                      邓军                                微分方程

                   

 

表中,U = C+T+B,(C,T)确定一组B,但是这组B其实与T无关,仅由C确定,所以(C,T)->->B。又因为T不是空集,所以(C,T)->->B为非平凡多值依赖

 

要想消除多只依赖,可以分解为:(C,T), (C,B)及

表1:

                  课程C                  教师T

                  数学                     邓军

 

表2:

 

                课程C                    参考书B

                数学                      数学分析

                数学                      高等代数

                数学                      微分方程

 

对于R中的每个非平凡多值依赖X->->Y(Y不属于X),X都含有候选码,则R属于4NF。

分析:对于每一个非平凡多值依赖X->->Y,X若含有候选码,也就是X->Y,所以4NF所允许的非平凡多值依赖是函数依赖。


多值依赖的性质:


若 X->->Y , 则 X->->Z  多值依赖对称性

若X->Y.则X->->Y   说明函数依赖是多值依赖的特殊情况,当X->Y的时候,对于每一个X都有一个Y与之对应,那么对于每一对X,Z都有一组Y与之对应

设属性值之间有包含关系 XY包含于W包含于U 那么如果R(U)上有X->->Y,那么在R(W)上一世成立的

若X->->Y 在R(U)上成立,且Y' 包含于Y,不能断言 X->->Y'在R(U)上成立(注意和上一条性质不同) (因为多值依赖中的定义中涉及了U中除了X,Y之外的其余属性Z,因此换成Y'后就需要涉及Z' = U-X-Y' 比之前确定X->->Y的时候属性列多,就不一定了


同时也引用在http://blog.csdn.net/smstong/article/details/5599609


 函数的概念和这个概念有相似的地方

     学习函数的概念前,先引入的概念是映射,一对一映射的关系就被称为函数。简单的例子

                           f(x, y, z)= x2+4y+z

对于任何一确定的(x,y,z),都有一个确定的f(x,y,z)与之对应。这种概念很容易推广到关系数据库模式上,R(U),U={X,Y,Z, K},对于任何一个元组,只要(X,Y,Z)确定了,就能确定整个元组,也就是存在K = f(X,Y,Z)的关系,只不过这里的f不能用公式表达,而只能是语义上的含义。

 

       再到后来,我们接触了类似y2=x的方程,也就是

                                    f(x,y) = +-sqrt(x)

       显然,此时对于一个确定的x值,f(x)可能有两个值与之对应,从严格的“函数”定义出发,这不能算是函数。但是为了统一概念,被称作“多值函数”。需要注意的是这里虽然x不能完全确定f(x,y)的值,但是能确定f(x,y)的取值范围(所有可能的值的组)。

        关系模式中的多值依赖也从概念上与此非常类似,给定元组中的一些属性,可确定另外的属性可能的取值,也就是说,给定的属性值能确定几个元组,而不是唯一的元组。

         还是上面的多值函数,可见f(x,y)的值仅与x有关 ,而与y无关。这在关系模式上就叫做平凡多值依赖。平凡多值依赖是4NF中可以存在的,而非平凡且非函数多值依赖不能在4NF中存在。


你可能感兴趣的:(数据库工程师)