【问题标题】:Circular Dependencies in 3NF3NF 中的循环依赖
【发布时间】:2017-04-02 04:51:23
【问题描述】:

我有一个关于规范化 (3NF) 的快速问题。如果我有一个表定义为...

客户(用户名、名字、姓氏、年龄、性别、种族)

用户名决定了名字、姓氏、年龄、性别、种族

但是..为了论证我们也可以假设firstName、lastName可以用来唯一标识表中的一行,所以firstName、lastName决定了用户名、年龄、性别、种族

是3NF中的表,因为一些非主属性(firstName,lastName)可以用来确定表中的其他属性,但是PK(用户名)可以确定非主属性然后用于确定其他属性。

我知道由于循环依赖问题,这不在 BCNF 中,但我希望它至少在 3NF 中。

提前感谢您的帮助。

【问题讨论】:

  • “一些非主要属性(名字,姓氏)” 这些是主要属性。
  • 如果它们不是密钥的一部分,它们就是非质数,对吗?或者如果它们不是候选键的一部分,它们是否是非质数?
  • PK 无关紧要。 CK 可以。它们是素数,因为它们在 CK 中。
  • 一个人在数据库中工作的时间太长,以至于无法知道 (FirstName, LastName) 甚至不接近候选键。等到你击中第二个“Joe Smith”或“Sally Jones”或“John Brown”,你就会很快学会它。
  • 我以它为例。我的数据库有一个类似于 firstName、lastName、phoneNumber 的 CK。我试图想出一个足以解决我的问题的假设情况。

标签: database database-design normalization database-normalization


【解决方案1】:

循环是无关紧要的,它在 BCNF 和每个较低的 NF 中。 BCNF 的定义是,所有非平凡 FD 的决定因素都是超级密钥。如果有多个 CK(候选键),就这样吧。 CK 将决定其他 CK 的属性,因为一个 CK 决定了每个属性。

PK 与规范化(以及所有其他关系理论)无关,CK 很重要。 PK 只是您决定称之为 PK 的 CK。

这里有两个 CK,{username} 和 {firstName, lastName}。主要属性,即 CK 中的属性,是用户名、名字和姓氏。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-12
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多