【问题标题】:Checking 3rd Normal Form from Functional Dependencies从功能依赖中检查第三范式
【发布时间】:2011-07-14 17:17:18
【问题描述】:

我有一个关于根据函数依赖确定关系是否处于第三范式的问题。

R = {A,B,C,D,E}
A -> B
BC -> E ED -> A

据此,我确定候选键为: {ACD},{BCD},{CDE}
Wikipedia 说,如果对于每个函数依赖 X->Y,关系至少满足以下要求之一,则关系处于第三范式: 1. Y 是 X 的子集 2. X 是一个超级键 Y 是某个键 K 的 K 的子集

我的工作:A -> B 满足 3 因为密钥 {BCD}BC->E 满足 3 因为 {CDE}CD -> A 满足 3 因为 {ACD}

这是解释这些规则的正确方法吗?

【问题讨论】:

    标签: relational-database database-normalization


    【解决方案1】:

    A -> B 表示函数依赖。但是这些

    R1 = {A,B}
    R2 = {B,C,E}
    R3 = {E,D,A}

    表达关系。 (我假设您的意思是我们将这些作为您从分解 R 中得到的关系。)

    范式适用于关系;它们不适用于功能依赖。说“A -> B 属于 3NF”或“A 确定 B 属于 3NF”是没有任何意义的。

    所以 R1 = {A,B} 是一个关系。它不“因为键 {B,C,D} 而满足规则 3”。不能,因为 {B,C,D} 不在 R1 中。

    这些规则与分解 R 产生的关系的候选键有关,而不是与 R 本身的候选键有关。

    稍后。 . . 我发现我做了一个错误的假设。您正在尝试评估 R,而不是分解它。在那种情况下,您的推理是正确的,并且 R 在 3NF 中。您还可以得出结论,R 属于 3NF,因为没有非素数属性。由于没有非主属性,因此每个 FD 的右侧都必须是候选键的一部分。

    但是 R 不在 BCNF 中。 (或 4NF 或 5NF。)你能解决这个问题吗?

    【讨论】:

    • 我知道,考虑到这些依赖关系,并使用我导出的候选键,我正在尝试确定 R 是否在 3NF 中。我认为 R 实际上属于 3NF,因为似乎没有任何传递依赖...你能确认一下吗?
    • 啊,我明白了。我误解了你。我没有意识到您是在尝试评估 R 而不是分解 R。所以是的,R 在 3NF 中,您的推理是正确的。您也可以说它在 3NF 中,因为没有非主要属性。也就是说,每一列都是超级键的一部分,因此每个 FD 的右侧必须是超级键的一部分。但它不在 BCNF 中。 (或 4NF 或 5NF。)
    猜你喜欢
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-13
    • 2010-10-24
    • 1970-01-01
    • 2015-04-08
    相关资源
    最近更新 更多