3NF 的综合算法

Synthesis-algorithm for 3NF

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

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

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

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

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

编辑:评论指出我的例子是错误的。不过,如果关系略有不同,即 R (A,B,C,D) 与 FD 的 {A,B -> C, B -> D} .. I我不会再看剩下的部分了,因为我认为我正确地做了算法,即使这个例子是错误的。

given a relation R with attributes {A, B, C} and functional dependencies {A,B -> C , A -> C}

明确表示您正在处理非平凡的 FD。 R also 有 FD A,B,C -> C,但它是微不足道的。始终明确说明您提供的 FD。例如,canonical/minimal 覆盖或所有非平凡的 FD 或一个覆盖或您知道的一些 FD,尽管其他非平凡的 FD 也可能成立,视情况而定。您可能从来没有做过后者,因为通常您不会提供足够的信息来确定 CK 并进一步规范化。

The relation is not in 2NF since the non-key attribute C only depends on A which is a proper subset of K.

删除 "only"。它使陈述不清楚,如果你的意思是 C 不依赖于 A,B 那么你就错了。

(I assume 1NF is given even though I can not know the domains of the attributes).

域无关紧要。我想您担心域可能涉及 "repeating groups" and/or "non-atomic values"。这是基于收到的非智慧。标准化为高范式与域无关。

根据定义,关系的元组属性具有来自域的 a 值。回复:"repeating groups":它不能有任何东西,那是来自前关系数据库的东西。 Re "non-atomic": Codd 将关系定义为能够具有关系值域。他指出,在关系上下文中,值可以被认为(在日常意义上)非原子的唯一方法是关系值。也就是说,他在关系上下文中定义 "atomic" 表示不是关系。他将 "normalized" 定义为没有关系值(即非原子)属性。 (所有这些都在 1970 中。)后来他将“1NF”定义为归一化。并开发了“2NF”和“3NF”。然后(在肯特和博伊斯之后)"BCNF"。所以他对这些术语的使用假定没有关系值域。

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

As a comment pointed out my example is faulty.

该评论:

Your example is stated incorrectly. Either C depends on A and B, or it depends on A only. – Lorenzo Gatti

评论有误。 C 依赖于 A 和 B and 它只依赖于 A。因为 A -> C 意味着 A,B -> C.