2

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

此关系的候选键K必须是{A, B}(不讨论如何找到候选键)。该关系不在 2NF 中,因为非关键属性C仅取决于A,它是K的真子集。(我假设给出了 1NF,即使我不知道属性的域)。

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

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

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

编辑:正如评论指出的那样,我的例子是错误的。稍微不同的关系是正确的,即R (A,B,C,D)与 FD 的 {A,B -> C, B -> D} .. 我不会再经历其余的,因为我即使示例是错误的,我也认为我正确地执行了算法。

4

1 回答 1

2

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

明确说明您正在处理非平凡的 FD。R有 FD A,B,C -> C,但它是微不足道的。始终明确说明您提供的 FD。例如,规范/最小封面或所有非平凡的 FD 或封面或只是您知道持有的一些 FD,尽管其他非平凡的也可能,视情况而定。您可能永远不会做后者,因为通常您不会提供足够的信息来确定 CK 并进一步规范化。

该关系不在 2NF 中,因为非关键属性 C 仅依赖于 A,A 是 K 的真子集。

去掉“唯一”。它使陈述不清楚,如果您的意思是 C 不依赖于 A,B 那么您就错了。

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

域无关紧要。我想您担心域可能涉及“重复组”和/或“非原子值”。这是基于接受的非智慧。对更高范式的规范化与域无关。

根据定义,关系的元组属性具有来自域的值。回复:“重复组”:它不能有任何,这是来自前关系数据库的东西。关于“非原子”:Codd 将关系定义为能够具有关系值域。他指出,在关系上下文中,一个值可以被认为(在日常意义上)非原子的唯一方法是关系值。即,他在关系上下文中将“原子”定义为不是关系。他将“规范化”定义为没有关系值(即非原子)属性。(所有这一切都发生在1970 年。)后来他将“1NF”定义为标准化。并开发了“2NF”和“3NF”。然后(在肯特和博伊斯之后)“BCNF”。

但是归一化理论是独立于域提出的。即,它被认为只是每个有问题的 JD 的分解。所以“1NF”也被用来作为一种关系。并且其他“NF”被使用而不考虑域。(尽管如果存在关系值域,那么可能存在不同于但类似于 FD 和 JD 的约束,它们会导致不同但相似的异常,并且即使在根据所有有问题的 JD 分解之后也会导致组件中的约束和异常。)无论是否关系具有关系值域,无论“1NF”或“规范化”或“规范化”是什么意思,您为将有问题的 JD 从有问题的 FD 中删除到您所称的 3NF 所遵循的分解过程都与域无关.

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

那条评论:

您的示例说明不正确。要么 C 依赖于 A 和 B,要么它仅依赖于 A。——洛伦佐·加蒂

评论是错误的。C 依赖于 A 和 B ,并且它仅依赖于 A。因为 A -> C 意味着 A,B -> C。

于 2015-08-18T12:56:39.267 回答