数据库中,候选字已知FD怎么推

来源:百度知道 编辑:UC知道 时间:2024/06/19 12:17:08

能把问题说得清楚点吗,是要求F+还是什么?
在关系模式的设计中,经常需要判断某个给定的函数依赖是否蕴涵于给定的函数依赖集,使用下面介绍的属性集的闭包可以解决这个问题。
设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中的每一个函数依赖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,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}+,得到{D}+={D,E},由于A不在{D}+中,所以该函数依赖不蕴涵于给定的函数依赖集F。
如果要求候选码的话就是他的闭包包括了属性集的所有属性就是候选码。但要求其子集都不是超码,既不能推出其所有的属性。