一、闭包
设X是函数依赖集,被X逻辑蕴涵的函数依赖全体构成的集合,称为函数依赖集X的闭包,记为。
设F是属性集U上的FD集,X是U的子集,那么(相对于F)属性集X的闭包用表示,它是一个从F集使用FD推理规则推出的所有满足X→A的属性 A的集合。通俗点来讲,闭包就是通过这些属性能够直接推出或间接推出的属性集的集合。
例:属性集U为ABCD,FD集为{A→B,B→C,D→B}。求,,
答:=ABC =ABCD =BCD
解析:A推出B,B推出C,所以A的闭包为ABC;AD,BD同理可得。
二、属性集闭包
属性集闭包定义 : 对F,F+中所有X→A的A的集合称为X的闭包,记为X+。可以理解为X+表示所有X可以决定的属性。 属性集闭包的算法: A+:将A置入A+。对每一FD,若左部属于A+,则将右部置入A+,一直重复至A+不能扩大。
三、候选键的求解方法
对于某一个依赖集来说:
(1)R只在依赖关系右边出现,不属于候选键
(2)L只在依赖关系左边出现,存在于任何候选键中
(3)N都没出现, 存在于任何候选键中
(4)(L +N) 求属性闭包, 加上左右LR 都出现的逐个求属性闭包,属性闭包为全部属性的最小属性集合为键。
推论1:对于给定的关系模式R及其函数依赖集F,若X(X属于R)是L类属性,且X+包含了R的全部属性,则X必为R的唯一候选关键字。
推论2:对于给定的关系模式R及其函数依赖集F,若X(X属于R)是N类和L类组成的属性集,且X+包含了R的全部属性,则X必为R的唯一候选关键字。