3NF的合成算法

时间:2015-08-14 09:30:10

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

我正在学习数据库,显然我必须处理normalforms。现在我想出了这个非常简单的例子;给定 R 与属性 {A,B,C} 和函数依赖关系的关系 {A,B - > C,A - > Ç}

此关系的候选键 K 必须是 {A,B} (不涉及如何查找候选键)。该关系不在2NF中,因为非键属性 C 仅依赖于 A ,它是 K 的正确子集。 (我假设即使我不知道属性的域,也会给出1NF。)

现在要达到3NF我将不得不使用合成算法,所以我首先找到功能依赖的规范集合,它们将是 {A - &gt; C} (也没有讨论如何找到规范集)。现在为了获得3NF中的关系,我形成了新的关系 R1 ,其中包含属性 {A,C} 。由于 K 未包含在 R1 中,我必须创建一个新关系 R2 ,其中包含一个候选键(此处 K < / em>的)。

这导致两个关系 R1(A,C) R2(A,B),我完成了,因为 R1 R2 在3NF。

我的工作正确吗?还有什么我必须要注意的吗?非常感谢任何建议!

编辑:正如评论指出我的例子是错误的。然而,它的关系略有不同,即 R(A,B,C,D)与FD的{A,B - > C,B - &gt; D} ..我不会再经历其余部分了,因为我认为我正确地做了算法,即使示例是假的。

1 个答案:

答案 0 :(得分:2)

  

给出具有属性{A,B,C}的关系R和函数依赖性{A,B - >; C,A - &gt; Ç}

明确表示您正在处理非平凡的FD。 R 具有FD A,B,C - > C,但它是微不足道的。始终明确你所提供的FD。例如,一个规范的/最小的封面或所有非平凡的FD或封面或只是你知道的一些FD,尽管其他非平凡的也可能,无论哪种情况。你可能没有做过后者,因为一般来说你不会给出足够的信息来确定CK并进一步规范化。

  

该关系不在2NF中,因为非键属性C仅取决于A,它是K的适当子集。

只删除&#34;&#34;。它使声明不清楚,如果你的意思是C不依赖于A,那么你就错了。

  

(我假设即使我不知道属性的域名也会给出1NF。)

域名无关紧要。我想你担心域名可能涉及&#34;重复群组&#34;和/或&#34;非原子值&#34;。这是基于收到的非智慧。归一化到更高的正规形式与域无关。

根据定义,关系的元组属性具有来自域的 a 值。回复:&#34;重复群组&#34;:它不能拥有来自关系前数据库的任何东西。 Re&#34;非原子&#34;:Codd将关系定义为能够拥有关系值域。他指出,在关系环境中,非原子性(在日常意义上)可以考虑价值的唯一方式是关系价值。即他定义了&#34; atomic&#34;在关系环境中意味着不是关系。他定义了#34;标准化&#34;表示没有关系值(即非原子)属性。 (所有这一切都在1970。)后来他定义了&#34; 1NF&#34;正常化。并开发了#2; 2NF&#34; &安培; &#34; 3NF&#34 ;.然后(肯特和博伊斯之后)&#34; BCNF&#34;。所以他对这些术语的使用假设没有关系值域。

但归一化理论是独立于领域而提出的。也就是说,它被认为只是对有问题的JD进行分解。所以&#34; 1NF&#34;也被用来做一个关系。而其他&#34; NFs&#34;在不考虑域名的情况下使用。 (虽然如果存在关系值域,那么可能存在不同但类似于导致不同但相似异常的FD和JD的约束,并且即使在对所有有问题的JD进行分解之后也会导致组件中的约束和异常。)无论是否一个关系具有关系价值的域,无论一个人的意思是什么?1NF&#34;或者&#34;标准化&#34;或者&#34;规范化&#34;,您从有问题的FD中删除有问题的JD到您调用的3NF的分解过程独立于域。

  

正如评论指出我的例子有问题。

评论:

  

您的示例说明不正确。 C取决于A和B,或者它仅取决于A. - Lorenzo Gatti

评论错误。 C取决于A和B 它仅取决于A.因为A - > C表示A,B - >下进行。