我有一个我应该做的功课问题。问题是,我读过或看过的任何教程似乎都无法帮助我解决这个问题:
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 |
“左”指的仅出现在依赖的左侧,“中间”指的是出现在左侧和右侧。
从那里我应该找到A
,E
或AE
的关闭,看看哪个闭包会让我ABCDEF
。但是,我找不到这样的关闭。
有没有人有任何关于此问题的提示,或者对如何解决问题有任何更好的想法?
答案 0 :(得分:0)
"左"属性应该在任何键中。但是,由于您指出AE
的关闭本身是AE
,因此您需要添加更多属性以扩展AE
并将其设为关键字。
让我们从添加B
开始,即考虑ABE
。由于ABE
,ABDE
的结尾为B -> D
。由于我们无法覆盖(C
和F
)属性,我们需要继续添加更多属性。我们添加C
并考虑ABCE
。然后,自ABCE
和ABCDEF
以来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.
...