【问题标题】:Deciding whether a relation is 3NF or 2NF判断一个关系是 3NF 还是 2NF
【发布时间】:2013-05-12 22:09:02
【问题描述】:

来自数据库管理系统书:给定关系 SNLRWH(每个字母表示一个属性)和以下功能依赖关系:

  • S->SNLRWH(S 是 PK)
  • R->W

我的尝试:

  • 首先,它不是 3NF:对于第二个 FD,R 不包含 W,R 也不包含密钥,W 也不是密钥的一部分。
  • 其次,它是/不是 2NF。如果我们检查第二个 FD,W 依赖于 R,而 R 又不是密钥的一部分。 卡住了。

【问题讨论】:

    标签: database relational-database database-normalization 3nf


    【解决方案1】:

    2NF 与部分键依赖有关。为了使关系无法通过 2NF 测试,关系必须具有至少一个具有至少两列的候选键。

    由于您的关系只有一个候选键,并且该候选键只有一列,因此您不可能有部分键依赖关系。它通过了 2NF 的测试。

    【讨论】:

    • A -ve 会非常苛刻 ;-)
    • 这仅适用于没有 FD {}->{A} 的情况,即没有每行包含相同 A 值的列时,因此每个 FD {B}- >{A} 已满。 (根据 nvogel 的回答。)
    【解决方案2】:

    如果候选键的某个真子集作为行列式出现在您的一个(非平凡)依赖项的左侧,则违反了 2NF。问问自己是否有任何决定因素是候选键的子集。

    通常只有当关系具有复合键时才违反 2NF - 具有多个属性的键。如果空集 (∅) 恰好是行列式,则仅具有简单键(单个属性键)的关系在技术上可能会违反 2NF。这种情况相当不寻常,很少被认为值得考虑,因为它们显然是“错误的”。为了完整起见,这里有一个特殊情况的有趣示例。在以下关系中,Circumference 和 Diameter 都是候选键。违反2NF的依赖是∅ -> Pi,即周长与直径之比。

    【讨论】:

    • 没有行列式是候选键的真子集的子集,一个 det 等于候选键,另一个甚至不是子集。所以关系是2NF。
    • @ToniAz {}->Pi 所以行列式 {} 是 CK {Circumference} 和 CK {Diameter} 的适当超集。因此,非主属性 Pi 在功能上部分依赖于每个 CK。所以违反了 2NF。
    • @philipxy,你是对的,但我猜 ToniAz 之前的评论是对 他的 示例的引用,而不是我的。
    猜你喜欢
    • 2013-05-11
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 2016-03-19
    相关资源
    最近更新 更多