database - 计算一组 FD 的闭包的算法

标签 database functional-dependencies

我正在寻找一种易于理解的算法来(手动)计算一组函数依赖项的闭包。 包括我的导师在内的一些消息来源说,我应该只是玩弄阿姆斯特朗的公理,看看我能得到什么。对我来说,这不是一种系统的方法(即容易遗漏某些东西)。

我们的类(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/

相关文章:

mysql - 从查询中获取并回显 mysql 数组

relational-database - 这违反了什么样的规范化规则?

functional-dependencies - 您如何计算分解的函数依赖性?

php - MYSQL 中的区分条件

sql - 如何获取外键的主键值

database - DBMS 中的非平凡函数依赖

haskell - 产生功能依赖的动机

Haskell:为什么 GHC 不使用fundeps 推断这个类型类中的类型?

ruby-on-rails - 在 ruby​​ on rails 中使用相同的 2 个表的多个一对多关系?

Android数据库设置ImageView