【问题标题】:BCNF conversionBCNF 转换
【发布时间】:2012-07-31 04:43:18
【问题描述】:

我正在尝试理解 BCNF 数据库,但我无法完全理解它。

考虑以下关系:

R (A, B, C, D, E, F, G)

以下函数依赖成立:

A -> E, F
A -> G
A, B -> D
B -> C
E, F -> G
A -> D

我将如何做到BCNF

【问题讨论】:

    标签: database database-design relational-database normalization


    【解决方案1】:

    非正式地说,在家庭作业问题中,您可以通过

    进入 BCNF
    • 假设您至少处于 1NF,
    • 移除部分关键依赖项以达到 2NF(至少),
    • 移除传递依赖以达到 3NF(至少),最后
    • 删除剩余的函数依赖项,其中左侧不是获取 BCNF 的候选键(至少)。

    部分键依赖的一个例子是对

    AB->D
    A->D
    

    由于A单独决定D,所以函数依赖AB->D具有部分键依赖。

    传递依赖的一个例子是对

    A->EF
    EF->G
    

    无法保证您可以将给定的关系规范化为 BCNF 而不是更高的。 (这似乎在大学生中引起了很多关于 SO 的困惑。)删除部分密钥依赖关系以达到 2NF 可能会留下 5NF 中的所有关系。

    【讨论】:

      【解决方案2】:

      )我们可以使用阿姆斯壮公理得到 F+

      A -> D,E,F,G

      B -> C (A,B -> D 被忽略,因为 A -> D)

      E,F -> G

      我们可以得到主键(A,B)。

      根据 BCNF 的定义,我们必须将 A-> (E,F), B->C, A -> D 和 (E,F) -> G 从原始模式中分离出来。

      (A,B) 主键(A,B)

      (B,C) 主键(B)

      (A,D) 主键(A)

      (A,E,F) 主键(A)

      (E,F,G) 主键(E,F)

      这就是 BCNF 分解。

      【讨论】:

        【解决方案3】:

        你可以试试这个: 表 1:A、B、D、E、F 复合主键(A、B)和外键(B)参考表 2(B) 表2:B,C,B为主键 表 3:A、E、F、G 与复合主键(A、E、F)

        【讨论】:

          猜你喜欢
          • 2013-01-28
          • 2020-07-20
          • 1970-01-01
          • 1970-01-01
          • 2021-05-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多