【问题标题】:Finding a relation in 3NF but not in BCNF在 3NF 中找到关系,但在 BCNF 中找不到
【发布时间】:2014-05-15 14:39:02
【问题描述】:

我已经阅读了许多关于如何区分 3NF/BCNF 关系的不同来源。到目前为止,这是我的理解......

我会以这个关系为例...

R = {A, B, C, D, E}

F = {A -> B, B C - > E, E D -> A}.

首先我们必须找到关系的键。 I used this video to help me do that.我得到了

Keys = {ACD, BCD, CDE}

现在要确保RBCNF 中,我们必须确保F 中每个函数依赖项的左侧都是Keys 之一。我们立即知道情况并非如此,因为第一个 FD 是 A -> B 并且 A 不是键之一。 所以它不在 BCNF 中。

现在要确保R3NF 中,我们必须确保F 中每个函数依赖的左侧是Keys 之一OR F 中每个函数依赖项的右侧是Keys 之一的子集。如果您查看每个 FD 的右侧,它们是 BEA。这些都是Key 的子集,所以这意味着它在 3NF 中

所以这是 罕见 案例之一(根据 wiki),其中一个关系在 3NF 中,但 不在BCNF 中。这种方法正确吗?它可靠吗?我错过了什么吗?

【问题讨论】:

标签: database database-normalization functional-dependencies 3nf bcnf


【解决方案1】:

首先你需要学习超键、候选键和主要属性。

但是,这个经验法则会有所帮助:

没有多个重叠候选键的 3NF 表是 保证在BCNF。

换句话说,如果 3NF 关系中的 候选键

  • 全部原子,或
  • 非原子但不重叠,

保证关系在BCNF中。

违反BCNF但满足3NF的最简单关系具有以下函数依赖:

A,B -> C C -> B

在这种情况下,候选键是(A,B)(A,C)
它符合 3NF,因为

  • 所有函数依赖项的右侧是一个主要属性

它违反了BCNF,因为

  • C -> B,但左侧不是超级键

【讨论】:

    【解决方案2】:

    BCNF:

    X->Y 其中 Y 可以是素数非素数
    在这里,X 必须是一个超级键

    3NF

    X->Y 其中 Y 非素数
    那么,
    X 必须超级键
    否则
    X 不需要超级键

    希望,这有帮助

    【讨论】:

    • 这些不清楚或不正确。看看一些教科书的定义,甚至是维基百科。
    • 定义模糊。例如,对于 BCNF,您可以简单地声明 X 必须是超级键。 3NF的定义是正确的,但这是最复杂的描述方式!
    猜你喜欢
    • 1970-01-01
    • 2016-05-06
    • 1970-01-01
    • 2014-01-02
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 2013-10-10
    • 1970-01-01
    相关资源
    最近更新 更多