链接的文章写得不是特别好。(这是一个观察,而不是批评。作者的第一语言不是英语。)我会尝试重写算法。这不是我告诉你如何做到这一点。这是我对原作者如何告诉你这样做的解释。
- 识别既不在任何 FD 的左侧也不在右侧的属性。
- 识别仅位于任何 FD 右侧的属性。
- 识别仅位于任何 FD 左侧的属性。
- 结合步骤 1 和 3 中的属性。
- 计算来自步骤 4 的属性的闭包。如果闭包包含所有属性,则来自步骤 4 的属性构成唯一的候选键。(无论有多少个候选键,每个候选键都必须包含这些属性。)
- 识别步骤 4 和步骤 2 中未包含的属性。
- 计算第 4 步中的属性的闭包加上第 6 步中所有可能的属性组合。
因此,对于您发布的 FD,您最终会得到这个。
- {F}
- {}
- {B}
- {高炉}
- {BF} 的闭包是 {BF}。这还不是所有属性。(但每个候选键必须包含 {BF}。)
- {ACDE}
- 计算这些属性集的闭包。
- {ABF}
- {CBF}
- {DBF}
- {EBF}
- {ACBF}
- {ADBF}
- {AEBF}
- {CDBF}
- {CEBF}
- {DEBF}
- {ACDBF}
- {ADEBF}
- {CDEBF}
如果我得到了正确的组合,每个候选键都将在步骤 7 的可能性中找到。在您的示例中,有 3 个候选键。