首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >3NF的综合算法

问3NF的综合算法
EN

Stack Overflow用户
提问于 2015-08-14 09:30:10
回答 1查看 5.7K关注 0票数 3

我正在学习有关数据库的知识,显然我必须处理规范形式。现在,我提出了一个非常简单的例子;给出了一个关系R,它的属性{A,B,C}和函数依赖关系{A,B -> C,A -> C}。

这种关系的候选键K必须是{A,B} (不讨论如何找到候选键)。这种关系不存在于2NF中,因为非键属性C只依赖于A(A是K的一个适当子集)(假设即使不知道属性的域,也给出了1NF )。

现在,为了达到3NF,我必须使用综合算法,所以我首先找到函数依赖关系的规范集,它是{A -> C} (也不讨论如何找到规范集)。现在,为了得到3NF中的关系,我形成了包含属性{A,C}的新的关系R1。由于R1中不包含K,所以我必须创建一个新的关系R2,其中包含一个候选键(这里是K)。

这就引出了R1 (A,C)和R2 (A,B)两种关系,而由于R1和R2都在3NF中,所以我就这样做了。

我的工作正确吗?还有什么我必须知道的吗?非常感谢您的建议!

编辑:正如一条评论指出的那样,我的例子是错误的。它与FD的{A,B,B -> C,B -> D}之间的关系略有不同,即R (A,B,C,D)。我不会再重复剩下的部分,因为我认为我做的算法是正确的,即使这个例子是错误的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-18 12:56:39

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

明确表示您正在寻址的是非平凡的FDs。R也有FD A,B,C -> C,但它是微不足道的。一定要明确你所给予的FDs。例如一个规范的/最小的覆盖或所有非平凡的FDs,或一个覆盖或只是一些FDs,你知道,尽管其他非平凡的可能也可能,无论情况如何。您可能从来没有做过后者,因为一般来说,您将不会提供足够的信息来确定CKs和进一步正常化。

这种关系不在2NF中,因为非键属性C只依赖于A,而A是K的一个适当子集。

放下“唯一”。如果你的意思是C不依赖于A,B,那么你就错了。

(我假设1NF是给定的,即使我不知道属性的域)。

域是不相关的。我想您可能担心域可能涉及“重复组”和/或“非原子值”。这是基于被接受的非智慧。对高级范式的规范化是独立于域的。

根据定义,关系的元组属性具有来自域的值。Re:“重复组”:它不可能有,这是来自关系前数据库的东西。关于“非原子”:Codd将关系定义为能够具有关系值域。他指出,(在日常意义上)在关系上下文中,一个值可以被视为非原子值的唯一方法是被关系值。他把关系上下文中的“原子”定义为“非关系”。他将“规范化”定义为没有关系值(即非原子)属性。(所有这些都是在1970中。)后来,他将"1NF“定义为规范化。并发展了"2NF“和"3NF”。然后(跟在肯特和博伊斯后面) "BCNF“。因此,他对这些术语的使用假定没有关系值域。

但归一化理论是独立于领域的。它被认为只是每个有问题的JD的分解。因此,"1NF“也被用来作为一种关系。而另一个"NFs“则被使用而不考虑域。(尽管如果存在关系值域,则可能存在与FDs和JD不同但类似的约束,这些约束会导致不同但相似的异常,甚至在每个有问题的JD分解后也会导致组件中的约束和异常。)无论关系是否具有关系值域,也不管"1NF“或”规范化“或”规范化“意味着什么,您要遵循的将问题JD从有问题的FDs移到您所称的3NF的分解过程是独立于域的。

正如有评论指出的那样,我的例子是错误的。

这一评论:

你的例子说得不对。要么C依赖于A和B,要么它只依赖于A。-洛伦佐·加蒂

这一评论是错误的。C依赖于A和B,而它只依赖于A。因为A -> C意味着A,B -> C。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32006777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档