表是否可以在3NF中没有主键?

时间:2017-12-04 11:40:28

标签: database database-design database-normalization functional-dependencies

  

1   如果以下一个,则表格自动为3NF:
  (i)如果关系由两个属性组成   (ii)如果2NF表仅包含一个非关键属性。

     

2   如果X→A是依赖关系,则如果存在下列条件之一,则表格为3NF:
  (i)如果X是超级密钥
  (ii)如果A是超级钥匙的一部分

我从this site获得了上述声明。

我认为在两个声明中,第二个子点都是错误的。

第一个说如果我们拥有所有非关键属性且表格在2NF中,2NF中的表将在3NF中。

考虑具有依赖性A-> B的示例R(A,B,C)。

这里我们没有候选键,所以所有属性都是非素数属性,关系不是3NF,而是2NF。

第二个说,对于形式X-> A的依赖关系,如果A是超级密钥的一部分,则它在3NF中。

考虑具有依赖性A-> B,B-> C的示例R(A,B,C)。这里的CK是{A}。现在,其中一个超级密钥可以是AC,而FD B-> C的RHS包含AC的一部分,但上述关系R仍不在3NF中。

我认为应该是A应该是候选键的一部分,而不是超级键

我说错了吗?

如果存在无功能依赖,那么特定关系是否可以在1NF,3NF或2NF中?

1 个答案:

答案 0 :(得分:1)

CK(候选键)是一个不包含较小超级键的超级键。超级键是一组独特的属性。关系是一组元组。所以每个关系都有一个超级键,即所有属性的集合。所以它至少有一个CK。

FD(函数依赖性)根据定义保持确定属性集的每个值对于其确定的集合始终具有相同的值。每个关系值或变量都满足"平凡" FD,其中确定的集合是确定集合的子集。每组属性都确定{}。所以每个关系至少满足一个FD。但是,正确的定义形式通常专门讨论非平凡的 FD。不要使用网络,使用教科书,其中有数十个免费在线,但并非所有都写得很好。许多教科书也忘记了决定因素和/或确定集合为{}的FD。

您的第一点不是3NF的正确定义。自从它的措辞"如果......"代替"当且仅当",或许它不是试图成为一个定义。但是,它仍然是错误的。 (i)是错误的,因为如果一个是CK而另一个在每个元组中具有相同的值,则具有两个属性的关系不在3NF中,即它由{}确定。

类似地,第二点不是一个正确的定义,即使你只把它视为3NF的结果(如果......),它也是错误的。这是一个定义,如果它使用当且仅当并且谈论了持有的FD 并且它说它是非平凡的 FD还修了一些其他的东西。

由于这些既不是正确的定义也不是正确的含义,因此有无数种方法可以反驳它们。阅读一本书(或我的帖子)并获得正确的定义。

有些评论是你的理由:

  

首先要说的是,如果我们拥有所有非关键属性并且表格在2NF中,则2NF中的表格将在3NF中。

我不知道你为什么这么认为。

  

这里我们没有候选键

总有一个或多个CK。你需要阅读CK的定义。还有非暴力算法可以找到它们。

  

第二个人说,对于形式X-> A的依赖性,如果A是超级密钥的一部分,则它在3NF中。

我不知道你为什么这么认为。

  

A应该是候选键的一部分,而不是超级键。

像第二点那样的正确定义通常会说" ......或(ii)A-X是CK"的一部分。但我无法理解你的推理。

合理的推理包括从假设出发并编写我们知道为真的新陈述,因为我们应用了一个定义,一个先前证明的陈述(定理)或一个合理的推理规则,例如来自' A暗示B'和' A'我们可以推导出B'您似乎需要阅读有关如何执行此操作的信息。