怎样求一个关系模式的码?

来源:百度知道 编辑:UC知道 时间:2024/09/22 14:27:55
在关系数据库里,怎么样来求一个关系模式的码? 请提供一个通用的算法,我知道是有这样算法的,但在书上没找到,请帮忙! 急!
这是验证啊,有没有一个直接求到所有码的算法?

这不全是验证,只要该属性集的闭包包含关系的所有属性,那么该属性就为候选码,明白不?
首先你要懂得函数依赖和属性集闭包的概念,利用下面的迭代算法计算X+,计算步骤如下:
1.选X作为闭包X+初值X(0).
2.由X(i)计算X(i+1)时,它是由X(i)并上属性集合A所组成,其中A满足下列条件:
Y包含于X(i),且F中存在函数依赖Y→Z,而A包含于Z
因为U是有穷的,所以上述过程经过有限步后会达到X(i)=X(i+1),此时X(i)为所求的X+。
例如:设F由下列函数依赖组成:
AB→C,D→EG,C→A,BE→C,BC→D,CG→BD,ACD→B,CE→AG
选BD为关系的码,求(BD)+。
设X(0)=BD
1. 计算X(1):在F中找其左边为B或D或BD的函数依赖,如D→EG,所以X(1)=BD∪EG=BDEG。
2. 计算X(2):在F中找包含X(1)的函数依赖,除D→EG外,还有BE→C,所以X(2)=BDEG∪C=BCDEG。
3. 计算X(3):在F中找包含X(2)的函数依赖,除去已使用过的函数依赖外,还有C→A,BC→D,和CE→AG,则得X(3)=ABCDEG。由于X(3)由全部属性组成,显然X(3)=
X(4)。因此得:
(BD)+ =ABCDEG,(BD)是码。