【问题标题】:When will it be in 3NF?3NF什么时候出?
【发布时间】:2015-10-16 02:59:02
【问题描述】:

我很难理解 3 Normal 形式。

3 NF:2 NF + 无转换

所以,例如:如果我有,

A -> B
B -> C

那么上面是一种过渡关系,因此不会在 3 NF 中? 我理解正确吗?

但在What exactly does database normalization do? 的这个答案中,paxdiablo 说,

Third normal form (3NF) - 2NF and every non-key column in a table depends on nothing but the key.据此,它将在 3 NF 中。我哪里错了?

【问题讨论】:

  • 这是文本中过于复杂的简单概念之一。阅读这样的内容:essentialsql.com/…
  • B 是不是关键列?如果不是候选键之一,那么 B⟶C FD 不是表的键的依赖 如果是候选键,那么 B⟶A 和 A⟶C 都是函数依赖(都是 A和 B 是候选键,因此两者都确定 C,并且每个确定另一个)或 A⟶B 是非键依赖。如果唯一的函数依赖是显示的,那么你不能同时让 A 和 B 作为候选键,所以关系不能在 3NF 或 BCNF 中。
  • 您的示例的所有列是什么?什么是所有 FD?这两个应该是最小的封面吗?即,表中的 FD 是否正是当这两个出现时必须存在的那些?这两个不能是 only 的,因为如果这些 FD 成立,那么 A ⟶ C 也成立。
  • @BrianMacKay 除了 1. 它指的是“主键”,但重要的是候选键。 2.它对传递依赖的定义是错误的。 X 传递地确定 Z 如果有一个 Y 其中 X → Y 和 Y → Z 而不是 Y → X
  • @JonathanLeffler A ⟶ B 和 B⟶ C 所以 A⟶C。所以A是CK。所以只有 2 种情况,B⟶ A 与否,B 是否为 CK(分别),给出 2NF 或 BCNF(分别)。

标签: database normalization database-normalization third-normal-form


【解决方案1】:

您正在尝试的 2 部分 3nf 定义是:

  • 2NF 成立,并且 R 的每个非主属性都非传递地依赖于每个超键。 (当有一个 Y 时,X 传递地确定 Z,其中 X → Y 和 Y → Z and not Y → X。)

3NF的另一种定义是:

  • 对于每个非平凡的 FD X → Y,要么 X 是超级键,要么 Y 中但不在 X 中的属性是素数。 (当 X 包含 Y 时,X → Y 是微不足道的。)

那么 BCNF 是:

  • 对于每个非平凡的 FD X → Y,X 是一个超级密钥

this answer

如果您的示例的唯一列是 A、B 和 C,并且您的两个 FD 形成最小覆盖,那么唯一的候选键是 A,C 依赖于非超级键,因此它不在 3NF(或 BCNF)中。

您(错误)使用术语如此草率,以至于您的句子没有任何意义。了解这些术语以及如何在定义中使用它们来指代各种事物,并以这种方式使用它们来指代适当的事物。并从(信誉良好的)教科书中获取您的定义。

【讨论】:

    【解决方案2】:

    如果一个关系在 2NF 中,则它在 3NF 中并且:

    1. 每个属性都依赖于一个键,
    2. 或者,如果一个属性依赖于一个非键,那么它就是素数。

    (作为素数意味着它属于一个键)。

    例如见Wikipedia

    如果只有第一个条件成立,则关系在Boyce-Codd normal form,即:

    1. 每个属性都依赖于一个键

    因此,在您的示例中,如果关系只有三个属性 ABC 以及两个依赖项,则在 3NF 中它是 not,因为 C 是不是素数,取决于B,这不是关键。另一方面,如果还有其他属性,并且C是键或键的一部分,那么它可能在3NF中(但这取决于其他功能依赖,应该满足上述条件)。

    2NF 表示每个非主属性都依赖于每个整个候选键,而不是它的部分。例如,如果一个关系具有属性ABC,则唯一的键是ABB -> C,那么这个关系在2NF中。 p>

    【讨论】:

    • 素数意味着,假设在某些数据库中,AB 原来是候选键,那么 AB 将是素数,对吧?
    • 是的,你是对的。顺便说一句,要知道一个属性是否是素数,必须知道关系的每个候选键。
    • 对。知道了。谢谢。你能为 2NF 添加一个类似的语句吗?你的答案是我见过的最明确的答案。再次感谢。 :)
    • 我编辑了答案以添加 2NF 的定义。
    • 再次感谢! :)
    猜你喜欢
    • 2014-04-13
    • 1970-01-01
    • 2011-03-22
    • 2011-11-10
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多