数据库原理之函数依赖、多值依赖

数据库原理之函数依赖、多值依赖这种概念很容易推广到关系数据库模式上 R U U X Y Z K 对于任何一个元组 只要 X Y Z 确定了 就能确定整个元组 也就是存在 K f X Y Z 的关系 只不过这里的 f 不能用公式表达 而只能是语义上的含义 若 X Y 在 R U 上成立 且 Y 包含于 Y 不能断言 X Y 在 R U 上成立 注意和上一条性质不同 因为多值依赖中的定义中涉及了 U 中除了 X Y 之外的其余属性 Z 因此换成 Y 后就需要涉及 Z U X Y 比之前确定 X Y 的时候属性列多 就不一定了

一、函数依赖(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属性获得相同的元组

例:

函数依赖是语义范畴 

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

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

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

例:

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

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

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

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

学生ID→学生姓名

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

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

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

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

 函数依赖的逻辑蕴涵

函数依赖的性质

函数依赖推理规则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/

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

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

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中存在。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/199072.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午1:55
下一篇 2026年3月26日 下午1:55


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号