【问题标题】:Partial Functional Dependency , still in 3NF?部分功能依赖,还在 3NF 中?
【发布时间】:2015-01-27 15:39:39
【问题描述】:

关系模式 R (ABCD)
功能依赖是:
AB -> D
CB -> D
A-> C
C -> A
最高范式???

我的理解:

候选键 = AB 和 BC

创建表时 AB 和 BC 都不能作为主键。那么让我们一一来吧。

对于密钥 AB:
AB -> D ( Fully Functional Dependency , so no problem )
CB -> D ( ??? )
A -> C (partial Functional Dependency , as left side contains only part of key)
C -> A ( Functional Dependency , So no problem )

对于密钥 BC

AB -> D ( ???? )  
CB -> D ( Fully Functional Dependency , so no problem )  
A  -> C  (Functional Dependency )  
C  -> A  ( Partial Functional Dependency , as it's LHS is part of Key )   

现在通过两个键,关系包含部分功能依赖。
那么它不应该在2NF中。
但答案是 3NF。
请纠正我。

【问题讨论】:

  • “关系包含部分功能依赖”不足以违反 2NF。查找、引用和使用部分 FD 和 CK 的定义。

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


【解决方案1】:

创建表时 AB 和 BC 都不能作为主键。 那么让我们一一来吧。

没有。您可以一一获取它们,但您必须考虑每个候选键。关系模型没有为标记一个候选键“主要”提供理论基础。在 SQL 数据库中可能有很好的实际原因,但仅在关系模型中没有理论上的理由。

“部分函数依赖”的概念适用于非主属性。唯一的非主属性是 D。这里没有部分依赖。

【讨论】:

  • 当删除一个确定属性时,一个持有的 FD 是部分的,给出了另一个持有的 FD。这不涉及 CK 或主要属性。每个具有 CK 的适当超集作为行列式的 FD 都是部分的;所以这里有部分FD持有,例如ABC-> D。对 2NF 重要的部分 FD 是 CK 确定非主要属性的部分。
【解决方案2】:
  1. 根据 Armstrong 的公理,当某些 FD 成立时,其他 FD 必须成立。但是您只查看 given FD。

  2. “部分 FD”不是根据 CK(候选密钥)定义的。 2NF 是根据部分 FD 和 CK 定义的。当任何 CK 上都没有非主属性的部分 FD 时,2NF 成立。没有部分 FD 时不会。

  3. PK(主键)无关紧要。 PK 只是你决定称之为“PK”的一些 CK。

  4. 当 Y 在功能上依赖于 X 的较小/适当子集 S 时,Y 在功能上部分依赖于 X。但如此确定的部分依赖是 X -> Y,而不是 S -> Y。

(见this answer。)

【讨论】:

    猜你喜欢
    • 2010-12-18
    • 2017-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-10
    相关资源
    最近更新 更多