可以与功能依赖关系形成关键的属性组合?

时间:2015-04-26 04:46:26

标签: database functional-dependencies

我有一个我应该做的功课问题。问题是,我读过或看过的任何教程似乎都无法帮助我解决这个问题:

Consider the relation R(A,B,C,D,E,F) with FD's:
CDE -> B
ACD -> F
BEF -> C
B   -> D
Which combination of attributes can form a key for R?

我真的不知道如何开始。从教程中,它告诉我要制作一个这样的表:

Left | Middle | Right
----------------------
AE   | BCDF   |

“左”指的仅出现在依赖的左侧,“中间”指的是出现在左侧和右侧。

从那里我应该找到AEAE的关闭,看看哪个闭包会让我ABCDEF。但是,我找不到这样的关闭。

有没有人有任何关于此问题的提示,或者对如何解决问题有任何更好的想法?

1 个答案:

答案 0 :(得分:0)

"左"属性应该在任何键中。但是,由于您指出AE的关闭本身是AE,因此您需要添加更多属性以扩展AE并将其设为关键字。

让我们从添加B开始,即考虑ABE。由于ABEABDE的结尾为B -> D。由于我们无法覆盖(CF)属性,我们需要继续添加更多属性。我们添加C并考虑ABCE。然后,自ABCEABCDEF以来B->D的关闭为ACD->F。因此,ABCE是一个超级密钥。请注意,此参数并不意味着ABCE是候选键(在这种情况下恰好是它),因为它仍然可能包含冗余属性。

此外,这并不意味着ABCE是唯一的。例如,我们可以添加C而不是添加F,而不是添加ABEF,这也是一个超级密钥。或者,我们可以选择不同的属性,而不是首先添加B。请考虑以下图表

AE (AE)+ is not equal to (ABCDEF) hence add attributes:
Option 1: Add B. (ABE)+ = (ABDE), not equal to (ABCDEF) hence add attributes:
        Option 1.1 Add C. (ABCE)+ = (ABCDEF), report (ABCE) as a superkey
        Option 1.2 Add F. (ABEF)+ = (ABCDEF), report (ABEF) as a superkey 
Option 2: Add C. (ACE)+ = (ACE), not equal to (ABCDEF) hence add attributes:
        Option 2.1 Add B. This step is not needed since we have already discussed (ABCE) in 1.1
        Option 2.2 Add D. (ACDE)+ = (ABCDEF), report (ACDE) as a superkey 
        Option 2.3 Add F. (ACEF)+ = (ACEF), not equal to (ABCDEF) hence add attributes:
            Option 2.3.1. Add B. (ABCEF) contains (ABCE) already considered in 1.1, hence is a superkey.
            Option 2.3.2. Add D. (ACDEF) contains (ACDE) already considered in 2.2, hence is a superkey.
Option 3. Add D.
       ... 
Option 4. Add F.  
       ...
相关问题