有一个众所周知的算法可以做到这一点。我不记得了,但练习似乎很简单,不用用它。
我认为这都是关于传递性的:
CurrentKey = {A, B, C, D, E, F}
你知道D决定E,E决定F。因此,D通过传递性决定F。由于 F 无法确定任何内容,因此我们可以将其删除,并且由于 E 可以从 D 中获得,因此我们也可以将其删除:
CurrentKey = {A, B, C, D}
由于 AB 确定了 C,而 C 无法确定任何我们知道它不能成为密钥一部分的内容,因此我们将其删除:
CurrentKey = {A, B, D}
最后我们知道 A 决定 D,因此我们可以从密钥中删除后者:
CurrentKey = {A, B}
如果一旦有了这个可能的密钥,您就可以重新创建所有功能依赖项,它是一个可能的密钥。
PS:如果您碰巧手边有该算法,请发布它,因为我很乐意重新学习:)