数据库 - 功能依赖

时间:2017-12-11 14:10:11

标签: database-design functional-dependencies

给出关系模式R(A,B,C,D,E,G)

具有一组功能依赖:

F = {A->BC,C->BG,CD->E,G->D,E->B,CE->A,BH->E}

有人可以向我解释如何找到C和E之间的关系吗?在C和A之间?

1 个答案:

答案 0 :(得分:1)

给定具有一组功能依赖关系的关系模式,短语:“找到两个属性之间的关系”并不清楚。 C和E之间有什么关系?如果C确定E,应该找到?或者如果E确定C?或者如果它们属于同一候选键?还有什么?

例如,假设您想知道C是否确定E或反之,您可以计算其中一个的闭包,并查找另一个是否属于此闭包。

例如,如果E属于C(写成C +)的闭包,那么我们知道C - > E成立(即,功能依赖性C→E可以从给定功能依赖性的集合F中导出)。或者反过来说,如果C属于E的封闭,那么我们知道E - > C持有。

可以使用一个使用可用依赖关系的简单算法来计算一组属性的闭包:我们从属性集开始,对于每个依赖关系,左边部分包含在闭包中,右边部分不包括在内,我们将正确的部分添加到闭包中。例如:

C+ = C  (we start with the attribute itself)
C+ = CBG (using C->BG, we add BG to the closure)
C+ = CBGD (using G -> D)
C+ = CBGDE (using CD -> E)
C+ = CBGDEA (using CE -> A)

没有其他依赖可以使用,所以我们在这里停下来注意,因为E属于C的闭包(实际上C是候选键),C-> E持有,而计算E +,我们发现关闭是BE,所以E不确定C。