资源描述:
《数据库系统原理 闭包》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、闭包就是由一个属性直接或间接推导出的所有属性的集合,例如:f={a->b,b->c,a->d,e->f}由a可直接得到b和d,间接得到c,则a的闭包就是{a,b,c,d}以下是写的比较科学规范的顶一记求解方法设X和Y均为关系R的属性集的子集,F是R上的函数依赖集,若对R的任一属性集B,一旦X→B,必有B⊆Y,且对R的任一满足以上条件的属性集Y1,必有Y⊆Y1,此时称Y为属性集X在函数依赖集F下的闭包,记作X+。计算关系R的属性集X的闭包的步骤如下:第一步:设最终将成为闭包的属性集是Y,把Y初始化为X;第二步:检查F中的每
2、一个函数依赖A→B,如果属性集A中所有属性均在Y中,而B中有的属性不在Y中,则将其加入到Y中;第三步:重复第二步,直到没有属性可以添加到属性集Y中为止。最后得到的Y就是X+。例1,设关系R(A,B,C,D,E,G)有函数依赖集F={AB→C,BC→AD,D→E,CG→B},求AB的闭包。解:首先从AB出发,令X={A,B},由于函数依赖AB→C左边的所有属性都在X中,所以可以把右边的C添加到X中,这时X={A,B,C}。其次考虑函数依赖BC→AD,左边B、C均在X中,右边D不在X中,将其添加到X中,此时X={A,B,C,
3、D}。再考虑函数依赖D→E,同理可将E添加到X中,此时X={A,B,C,D,E}。上述方法再不能向X中添加属性,所以得到{A,B}+={A,B,C,D,E}。如果知道如何计算任意属性的闭包,那么就能检验任意函数依赖X→Y是否被函数依赖集F逻辑蕴涵,其步骤如下:第一步:计算X的闭包X+;第二步:判断Y是否被X+所包含,如果Y⊆X+,说明F逻辑蕴涵函数依赖X→Y;否则说明F不会逻辑蕴涵函数依赖X→Y。例如:在例1中得到属性D在{A,B}+中,所以F逻辑蕴涵AB→D。现在判断函数依赖D→A是否被函数依赖集F逻辑蕴涵。计算{D}
4、+,得到{D}+={D,E},由于A不在{D}+中,所以该函数依赖不蕴涵于给定的函数依赖集F。如果要求候选码的话就是他的闭包包括了属性集的所有属性就是候选码。但要求其子集都不是超码,既不能推出其所有的属性。数据库闭包和候选码求解方法闭包概念 以下是写的比较科学规范的闭包求解方法,设X和Y均为关系R的属性集的子集,F是R上的函数依赖集,若对R的任一属性集B,一旦X→B,必有B⊆Y,且对R的任一满足以上条件的属性集Y1,必有Y⊆Y1,此时称Y为属性集X在函数依赖集F下的闭包,记作X+。 计算关系R的属性集X的闭包的步骤
5、如下: 第一步:设最终将成为闭包的属性集是Y,把Y初始化为X; 第二步:检查F中的每一个函数依赖A→B,如果属性集A中所有属性均在Y中,而B中有的属性不在Y中,则将其加入到Y中; 第三步:重复第二步,直到没有属性可以添加到属性集Y中为止。最后得到的Y就是X+ 例(1): 设有关系模式R(U,F),其中U={A,B,C,D,E,I},F={A→D,AB→E,BI→E,CD→I,E→C},计算(AE)+ 解: (1)令X={AE},X(0)=AE (2)在F中寻找尚
6、未使用过的左边是AE的子集的函数依赖,结果是:A→D,E→C;所以X(1)=X(0)DC=ACDE,显然X(1)≠X(0). (3)在F中寻找尚未使用过的左边是ACDE的子集的函数依赖,结果是:CD→I;所以X(2)=X(1)I=ACDEI。虽然X(2)≠X(1),但F中寻找尚未使用过函数依赖的左边已经没有X(2)的子集,所以不必再计算下去,即(AE)+=ACDEI。 说白话一点:闭包就是由一个属性直接或间接推导出的所有属性的集合。 例如:f={a->b,b->c,a->d,e
7、->f};由a可直接得到b和d,间接得到c,则a的闭包就是{a,b,c,d} 候选码的求解理论和算法 对于给定的关系R(A1,A2,…An)和函数依赖集F,可将其属性分为4类: L类 仅出现在函数依赖左部的属性。 R类 仅出现在函数依赖右部的属性。 N类 在函数依赖左右两边均未出现的属性。 LR类 在函数依赖左右两边均出现的属性。 定理:对于给定的关系模式R及其函数依赖集F,若X(X∈R)是L类属性,则X必为R的任一候选码的成员。 推论:对于给定的关系模式R及其函数依赖集F,若X(X∈R)是
8、L类属性,且X+包含了R的全部属性;则X必为R的唯一候选码。 例(2):设有关系模式R(A,B,C,D),其函数依赖集F={D→B,B→D,AD→B,AC→D},求R的所有候选码。 解:考察F发现,A,C两属性是L类属性,所以AC必是R的候选码成员,又因为(AC)+=ABCD,所以AC是R的唯一候选码