函数依赖 F = {AB->CD , A->B} 或 A->C

Functional dependency F = {AB->CD , A->B} or A->C

我有 R(A,B,C,D) 和函数依赖 AB->CD 和 A->B 我想知道或者 A->C 是正确的吗?

我尝试通过 amstrong 公理找到 F 闭包:

AB->C (decomposition from AB->CD)
AB->D (decomposition from AB->CD)
AB->AB (reflexivity) 
AB->A (decomposition from AB->AB)
AB->B (decomposition from AB->AB)
A->A
B->B
AB->ABCD (Union) <- candidate key 

我觉得这不正是我所缺少的吗?另外我觉得 A->C 是正确的,因为 AB->C 但我不确定。

你有两种不同的方法来查看 A → C 是否可以由 AB → CDA → B 导出:要么你可以尝试计算属性 A 的闭包,使用用于计算一组属性的闭包的算法,并查看它是否包含 C(简单方法),或者您可以通过应用阿姆斯特朗公理(更困难的方法)推导出它的证明。

让我们先用简单的方法来做:

A+ = A     (starting point)
A+ = AB    (by using A → B)
A+ = ABCD  (by using AB → CD)

所以,由于A+包含C,我们证明了A → C属于F+,相当于说A → C是隐含的通过 AB → CDA → B.

现在试试第二种方法:

1. A → B    (given)
2. AB → CD  (given)
3. A → AB   (by 1. for enrichment, adding A both to left and right side of the dependency)
4. A → CD   (by 3. and 2. for transitivity)
5. A → C    (by 4. for decomposition)

另一方面,您可能不想做的事情是计算F的闭包,因为这将是一个相当冗长且繁琐的任务...(这是一项指数级的任务!)。

AB->CD(给定)
因此,
AB->C,并且
AB->D
(通过分解)
A->B(给定)
所以,A->AB,通过扩充
因此,通过传递性,A->C & A->D!