【问题标题】:Can a relation in Boyce-Codd Normal Form have functional dependencies between prime attributes?Boyce-Codd 范式中的关系能否在主要属性之间具有函数依赖关系?
【发布时间】:2026-02-25 10:25:01
【问题描述】:

我的问题很简单。从我所见,似乎从 1NF、2NF、3NF 到 Boyce-Codd 形式的规范化似乎主要处理非主要属性的问题。如果我没记错的话,下表是 Boyce-Codd 形式:

R(A,B,C), F = {AB->C, A->B}

A,B 是复合主键,我觉得这很奇怪。

我错过了什么吗?

【问题讨论】:

  • 您的表甚至不在3NF 中,因为C 传递地依赖于AB
  • 您的“我有这些 FD”没有意义。 “这些都是持有的FD”?--不可能。 “这些都是持有的不平凡的FD”?--不可能。 “这些是一些持有的FD”?--问题无法回答。找出什么是 cover 以及应用特定定义/规则/算法的确切条件。要确定 CK 和 NF,我们必须得到构成掩护的 FD。有时是最小/不可约覆盖。并且必须给出所有属性的集合。 See this answer.
  • 现在您只是要求我们使用定制教程重写您的教科书。请参阅How to Ask,点击谷歌搜索“stackexchange 作业”和投票箭头鼠标悬停文本。按照教科书的理由展示您的工作步骤,并在您遇到困难的第一个地方提出 1 个经过研究的特定非重复问题。引用您所依赖的定义、定理和算法。所有步骤也是常见问题解答。 PS“对我来说很奇怪”什么都没有传达。 PS PK 无关紧要,CK 很重要。复合 CK 是相关的,因为它们有一个特定的 BCNF 定理。

标签: database database-normalization


【解决方案1】:

如果 A->B 则 {AB} 不可能是主键,因为它不是最小的。因此假设 A 是唯一的键,那么 R 至少在依赖 AB->C、A->B 的 BCNF 中。

【讨论】:

    【解决方案2】:

    如果 A 决定 B (A -> B),那么说 AB 决定 C (AB -> C) 意味着 A 决定 C (A -> C)。

    说 A -> B 意味着没有两条记录,其中 B 列具有不同的值但 A 列具有相同的值。

    说 AB -> C 意味着没有两条记录,其中 C 列具有不同的值但 A 和 B 列具有相同的值。虽然,因为 A -> B,我们已经知道如果 A 列具有相同的值,那么 B 列也具有相同的值。因此,我们可以这样说,看到 A -> B 然后 AB -> C 意味着 A -> C。

    因此,R 中的 FD 是:

    1. A -> B
    2. A -> C

    对于要在 BCNF 中的关系,必须满足以下条件:

    1. 它必须已经在 3NF 中
    2. 在行列式不是超级键的情况下,不能存在非平凡的函数依赖关系

    由于您已经在 3NF 中建立了关系,正如您所说,我们满足第一个条件。 在所有 R 的 FD 中,行列式都是超级键(A 是超级键),我们满足第二个条件。

    因此,R 在 BCNF 中。

    【讨论】:

    • 你第一句话错了。这 3 个 FD 说了 3 种不同的东西。但是,它们的某些组合意味着某些其他组合。您的第 1 2 个项目符号是错误的。部分和传递 FD 成立,但不是问题——你没有使用正确的 FD 和 NF 术语定义。您没有清楚地证明主张的合理性或给出推理,因此即使纠正了错误的主张,这也不是很有帮助。像这样给出人们在解决问题时所思考的事情的片段的 PA 答案并没有给提问者任何他们可以用来解决其他问题的东西。将他们发送到他们应该遵循的算法。
    • 我的第一句话怎么错了?由于 A 唯一标识 B,任何 AB 对唯一标识 C,然后任何 A 唯一标识 C。无论如何,我会让答案更笼统,以帮助遇到这些问题的其他人。