前言:这篇文章只要认真看完一定能懂本篇文章讲的几个概念
闭包
设M为R关系模式上的函数依赖集,被M所逻辑蕴含的全体构成的集合,称为M的闭包,记做
M
+
M^+
M+(这里只要了解闭包的符号就好,嘿嘿!)
注意:求 “x” 的闭包就是求 “x” 能直接或者间接推出的属性的集合
(可能这句话稍微有那么一丢丢抽象,我们稍微看看下面的例子就懂了)
example
关系R(A,B,C)满足函数依赖M(A -> B,A -> C,B -> AC)求A,B,C的闭包
①求A的闭包
A -> B,A -> C, A -> A,A -> ∅
由上可知由A可以推出A,B,C。A的闭包就是A所推出的元素组成的集合即ABC(其中空集可以省略)
②求B的闭包
B -> AC,B -> B,B -> ∅
所以由B可以推出A,B,C。故B的闭包也是ABC
③求C的闭包
C -> C,C -> ∅
故C的闭包就是C
候选键
若P为R<U,M>上的一个属性集,如果U完全依赖于P,则称P为M上的候选键
解释一下上面那句话的意思
如果P的闭包为U的话,那么P就为U上的候选键(其中U为R中所有的元素即ABC)
在上面例题中的R(A,B,C)中,A的闭包为ABC,A就为R上的候选键,B的闭包为也为ABC所以B也是R上的候选键,C的闭包为C,故C不是R上的候选键。
小结一下已知关系模式和函数依赖求候选码的步骤:
①只在右边出现的属性,不属于候选码;
②只在左边出现的属性,一定存在于某候选码当中;
③左右都不出现的属性一定存在于任何候选码当中;
④其他属性逐个与2,3的属性组合,求属性闭包,若闭包等于U,则为候选码。
example:
关系模式R(A,B,C)
存在函数依赖F={AB->C, C->B}
求R的候选码。
只在左边出现 : A
只在右边出现 : 没有
左右都不出现 : 没有
左右都出现的 : B, C
首先看AB(A为存在于候选码中的码,所以用A与其他码组合),AB本身自包AB,而AB->C,所以AB的闭包是ABC=U。
再看AC,AC本身自包AC,而C->B,所以AC的闭包是ABC=U。
故而R的候选码是AB,AC。