规范化理论:函数依赖

函数依赖的定义

关系模式中的各属性之间相互依赖、相互制约的联系称为数据依赖。数据依赖一般分为函数依赖、多值依赖和连接依赖。其中函数依赖是最重要的数据依赖。

函数依赖(Functional Dependency,FD)是关系模式中属性之间的一种逻辑依赖关系。例如,在一个有关学生的关系模式SCD(属性SNo,SN,Age,Dept,MN,CNo,Score分别代表学生证号,学生姓名,年龄,所属院系,院系主人姓名,选修课程号,分数)中,属性SNo与SN、Age和Dept之间都有一种依赖关系。由于一个SNo只对应一个学生,而一个学生只能属于一个系,所以当SNo的值确定之后,SN、Age、Dept的值也随之被唯一地确定了。这类似于变量之间的单值函数关系。设单值函数Y=F(X),自变量X的值可以决定一个唯一的函数值Y。在这里,我们说SNo决定函数(SN, Age, Dept),或者说(SN, Age, Dept)函数依赖于SNo。

设关系模式R(U, F),U是属性全集,F是U上的函数依赖集,X和Y是U的子集,如果对于R(U)的任意一个可能的关系r,对于X的每一个具体值,Y都有唯一的具体值与之对应,则称X决定函数Y,或Y函数依赖于X,记作X→Y。我们称X为决定因素,Y为依赖因素。当Y不函数依赖于X时,记作:Y↛X。当X→Y且Y→X时,则记作:X↔F。

对于关系模式SCD
U={SNo, SN, Age, Dept, MN, CNo, Score}
F={SNo→SN, SNo→Age, SNo→Dept, (SNo, CNo)→Score}
一个SNo有多个Score的值与其对应,因此 Score不能唯一地确定,即Score不能函数依赖于SNo,所以有:SNo↛Score,同样有:SNo↛CNo。但是Score可以被(SNo, CNo)唯一地确定。所以可表示为:(SNo,CNO)→Score。
 


函数依赖的逻辑蕴涵定义

假设已知关系模式R(X, Y, Z)有X→Y,Y→Z,问X→Z是否成立?能否从已知的函数依赖推导出XY→YZ?
类似这些由已知的一组函数依赖,判断另外一些函数依赖是否成立或者能否从前者推导出后者的问题,就是函数依赖的逻辑蕴涵所要讨论的内容。

设F是在关系模式R(U)上成立的函数依赖集合,X,Y是属性集U的子集,X→Y是一个函数依赖。如果从F中能够推导出X→Y,即如果对于R的每个满足F的关系r也满足X→Y,则称X→Y为F的逻辑蕴涵(或F逻辑蕴含X→Y),记为F|=X→Y。

设F是函数依赖集,被F逻辑蕴涵的函数依赖的全体构成的集合,称为函数依赖集F的闭包(Closure),记为F^{+}

 


函数依赖的推理规则及正确性

从已知的函数依赖,可以推导出另外一些新的函数依赖,这就需要一系列推理规则,这些规则常被称为“Armstrong公理”

设有关系模式R(U),U是关系模式R的属性集,F是R上成立的只涉及U中属性的函数依赖集。X,Y,Z,W均是U的子集,r是R的一个实例。函数依赖的推理规则如下。

1. Armstrong公理

(1)自反律(Reflexivity)
如果 Y⊆X⊆U,则X→Y在R上成立。即一组属性函数决定它的所有子集。
例如,在关系SCD中,(SNo, CNo)→SNo和(SNo, CN)→CNo。

(2)增广律(Augmentation)
若X→Y在R上成立,且Z属于U,则XZ→YZ在R上也成立。

(3)传递律(Transitivity)
若X→Y和Y→Z在R上成立,则X→Z在R上也成立。

Armstrong公理的推理规则是正确的。也就是,如果X→Y是从F用推理规则导出,那么X→Y在F^{+}中。

2. Armstrong公理推论
(1)合并律(Union rule)
若X→Y和X→Z在R上成立,则X→YZ在R上也成立。
例如,在关系SCD中,SNo→(SN, Age),SNo→(Dept, MN), 则有SNo→(SN, Age, Dept, MN)。

(2)伪传递律(Pseudotransitivity rule)
若X→Y和YW→Z和在R上成立,则XW→Z在R上也成立。

(3)分解律(Decomposition rule)
若X→Y和Z⊆Y在R上成立,则X→Z在R上也成立。
很显然,分解律为合并律的逆过程。

由合并律和分解律,很容易得到以下定理:
如果A_{1}A_{2}A_{n}是关系模式R的属性集,那么X→A_{1}A_{2}A_{n}成立的充分必要条件是X→A_{i}(i=1, 2, … , n)成立。

(4)复合律
若X→Y和W→Z在R上成立, 则XW→YZ在R上也成立。



函数依赖的分类

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

设有关系模式R(U),U是属性全集,X和Y是U的子集,如果X→Y,并且对于X的任何一个真子集X’,都有X’↛Y,则称Y对X完全函数依赖(Full Functional Dependency),记作X\overset{f}{\rightarrow}Y。如果对X的某个真子集X’,有X’→Y,则称Y对X部分函数依赖(Partial Dependency),记作X\overset{p}{\rightarrow}Y。

例如,如在关系模式SCD中,因为SNo↛Score,且CNo↛Score,所以有(SNo, CN)\overset{f}{\rightarrow}Score。而SNo→Age,所以(SNo,CNo)\overset{p}{\rightarrow}Age。

只有当决定因素是组合属性时,讨论部分函数依赖才有意义,当决定因素是单属性时,只能是完全函数依赖。例如,在关系模式S(SNo, SN, Age, Dept)中,决定因素为单属性SNo,有SNo→(SN, Age, Dept),不存在部分函数依赖。

 

传递函数依赖

设有关系模式R(U),U是属性全集,X,Y,Z是U的子集,若X→Y,但Y↛X,而Y→Z(Y X,Z Y),则称Z对X传递函数依赖(Transitive Functional Dependency),记作:X\overset{t}{\rightarrow}Z。如果Y→X,则Y↔X,这时称Z对X直接函数依赖,而不是传递函数依赖。

例如,在关系模式SCD中,SNo→Dept,但Dept↛SNo,而Dept→MN, 则有SNo\overset{t}{\rightarrow}MN。当学生不存在重名的情况下,有SNo→SN,SN→SNo,SNo↔SN,SN→Dept,这时Dept对SNo是直接函数依赖,而不是传递函数依赖。

综上所试述,函数依赖分为完全函数依赖、部分函数依赖和传递函数依赖三类,它们是规范化理论的依据和规范化程度的准则。

 

 

函数依赖集的等价、覆盖和最小函数依赖集

从形式上,往往一个函数依赖集F包含的函数依赖条数较少,相应的F^{+}所包含的函数依赖条数要比F多得多,但实际上F蕴涵的信息量却与F^{+}所表达的信息一样多。人们自然会问:还有其他的函数依赖集与F等价吗?如果有,能否从中找出一个形式最简单的函数依赖集呢?

设关系模式R(U)的两个函数依赖集F和G,如果满足F^{+}=G^{+},则称F和G是等价的函数依赖集。记作:F=G。如果F和G等价,就说F覆盖G,或G覆盖F。两个等价的函数依赖集在表示能力上是完全相同的。

检查F和G是否等价不太难。只要验证F中的每个函数依赖X→Y都在G^{+}中,同时G中的每个函数依赖P→W也都在F^{+}中。这里并不需要计算F^{+}G^{+},而只要计算X关于G的闭包X^{+},验证Y⊆X^{+},同时,计算V关于F的闭包V^{+},验证W属于V^{+}。一般说来,X^{+}V^{+}的计算量比F^{+}G^{+}的计算量小得多。

 

函数依赖集F中的函数依赖很多,我们应该去掉F中无关的函数依赖、平凡的函数依赖、函数依赖中无关的属性,以求得F的最小依赖集F_{min},其定义形式如下。

设F是属性集U上的函数依赖集,X→Y是F中的函数依赖。函数依赖中无关属性(Extraneous Attribute)、无关函数依赖的定义如下:

(1)如果A∈X,且F逻辑蕴涵(F{X→Y})U{(X-A)→Y},则称属性A是X→Y左部的无关属性;

(2)如果A∈Y,且(F-{X→Y)U{X→(Y-A)逻辑蕴涵F,则称属性A是X→Y右部的无关性;

(3)如果X→Y的左右两边的属性都是无关属性,则函数依赖X→Y称为无关函数依赖。

实际上,无关函数依赖可以从F使用推理规则推出。

 

如果F_{min}是F的一个最小函数依赖集,那么F_{min}应满足下列四个条件:

(1)F_{min}^{+} =F^{+}

(2)每个函数依赖的右边都是单属性;

(3)Fmin中没有冗余的函数依赖(即在F_{min}中不存在这样的函数依赖X→Y,使得F_{min}与F={X→Y}等价),即减少任何一个函数依赖都将与原来的F不等价;

(4)每个函数依赖的左边没有冗余的属性(即F_{min}中不存在这样的函数依赖X→Y,X有真子集W使得F_{min}-{X→Y)U{W→Y}与F_{min}等价),减少任何一个函数依赖左部的属性后,都将与原来的F不等价。

 

 

 

参考资料:[1]陈志泊,王春玲,许福,范春梅.数据库原理及应用教程(第3版)[M].北京:人民邮电出版社,2014:131-139.

 

 

 

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值