【问题标题】:Identifying the Boyce Codd Normal Form识别 Boyce Codd 范式
【发布时间】:2013-01-12 14:08:56
【问题描述】:

我试图弄清楚 3NF 和 BCNF 之间的区别,我想我已经到了那里,但如果有人能提供帮助,那就太好了。

以下是第 3 范式中的一系列关系(从Identifying Functional Dependencies 窃取,而后者又从 Connolly & Begg 的数据库系统中获取):

Client {clientNo(PK), clientName}
Owner {ownerNo(PK), ownerName}
Property {propertyNo (PK), propertyAddress, rent}
ClientRental {clientNo(PK), propertyNo(PK), rentStart, rentFinish, ownerNo(FK)}

每处房产只有一位业主,客户可以租用这些房产。假设每个房产的租金是固定的。

所以我的问题是:这些是否也在 BCNF 中?

我的预感是 ClientRental 关系不是因为 PropertyNo->ownerNo。所以 PropertyNo 是函数依赖的决定因素,但它不是超键。

我在正确的球场附近吗?

【问题讨论】:

  • ClientRental 不在 3NF 中,因为存在传递依赖。如果你正确地解决了这个问题,我想你会在 6NF 中有两个表,在 5NF 中有两个。
  • 哦,是的,当然,因为 ownerNo 通过 propertyNo 传递依赖于密钥。对?非常感谢。虽然现在我仍然没有一个不在 BCNF 中的 3NF 表的好例子。

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


【解决方案1】:

表达差异的简短、非正式的方式是,在 BCNF 中,每个函数依赖项的每个“箭头”都是候选键中的一个“箭头”。对于 3NF 中但不在 BCNF 中的关系,除了候选键之外,至少会有一个“箭头”。

Wikipedia entry for 3NF table not meeting BCNF

一个常见的误解是你可以标准化到 2NF 并且没有更高,然后到 3NF 并且没有更高,然后到 BCNF 并且没有更高 >。事实上,修复部分关键依赖关系以达到 2NF 通常会使您保留 5NF 中的所有关系。也就是说,您从 2NF 中的一个关系转到 5NF 中的多个关系,而在中间没有停留在 BCNF。

【讨论】:

    猜你喜欢
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    相关资源
    最近更新 更多