我正在寻找一种易于理解的算法来(手动)计算一组函数依赖项的闭包。 包括我的导师在内的一些消息来源说,我应该只是玩弄阿姆斯特朗的公理,看看我能得到什么。对我来说,这不是一种系统的方法(即容易遗漏某些东西)。
我们的类(class)教科书(DB 系统 - 完整的书,第 2 版)也没有为此提供算法。
最佳答案
用更“系统”的方式来说,这可能就是您正在寻找的算法。使用前三个阿姆斯特朗公理:
- 闭包 = S
- 循环
- 对于 S 中的每个 F,应用自反性和增广规则
- 将新的 FD 添加到闭包中
- 对于 S 中的每对 FD,应用传递性规则
- 将新的 Fd 添加到闭包中
- 直到闭包不再有任何改变`
我从 this presentation notes 中获取的.但是,我发现以下方法更容易实现:
- /*F是FD的集合*/
- F⁺ = 空集
- 对于每个属性集 X
- 计算 X 在 F 上的闭包 X⁺
- 对于 X⁺ 中的每个属性 A
- 将 FD 添加到 F⁺ 中:X -> A
- 返回 F⁺
取自here
关于database - 计算一组 FD 的闭包的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17052206/