如何从功能依赖中获取最小密钥?

mrj*_*min 5 sql database normalization relation

我需要一些帮助和指导.

我有以下关系:R = {A, B, C, D, E, F}和功能依赖的集合

F = {
  {AB -> C};
  {A  -> D};
  {D  -> AE};
  {E  -> F};
}

R的主键是什么?

如果我应用推理规则,我会得到这些额外的函数依赖项:

D -> A
D -> E
D -> F

D -> AEF

A -> E
A -> F
A -> DEF
Run Code Online (Sandbox Code Playgroud)

我该如何继续?

Mos*_*cho 5

有一种众所周知的算法可以做到这一点.我不记得了,但是练习似乎很简单,不使用它.

我认为这完全是关于传递性的:

CurrentKey = {A, B, C, D, E, F}
Run Code Online (Sandbox Code Playgroud)

你知道D确定E和E确定F.因此,D通过传递性确定F. 由于F没有确定任何东西,我们可以删除它,因为E可以从D获得,我们也可以删除它:

CurrentKey = {A, B, C, D}
Run Code Online (Sandbox Code Playgroud)

由于AB确定C和C没有确定任何我们知道它不能成为密钥的一部分,所以我们删除它:

CurrentKey = {A, B, D}
Run Code Online (Sandbox Code Playgroud)

最后我们知道A确定D所以我们可以从密钥中删除后者:

CurrentKey = {A, B}
Run Code Online (Sandbox Code Playgroud)

如果您拥有此可能的密钥,则可以重新创建所有功能依赖项,这是可能的密钥.

PS:如果您碰巧有这个算法,请发布它,因为我很乐意重新学习:)