database - 3NF 的综合算法

标签 database database-normalization functional-dependencies 3nf

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

此关系的候选键 K 必须是 {A, B}(不讨论如何找到候选键)。该关系不在 2NF 中,因为非键属性 C 仅取决于 AAK 的真子集。 (我假设 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} .. 我不会再次检查其余部分,因为我认为我正确地执行了算法,即使示例是错误的。

最佳答案

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

明确表示您正在处理非平凡的 FD。 R 有 FD A,B,C -> C,但它很简单。始终明确说明您提供的 FD。例如,规范/最小覆盖或所有非平凡的 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.

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

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

域无关紧要。我想您担心域可能涉及“重复组”和/或“非原子值”。这是基于收到的非智慧。归一化为高范式与域无关。

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

但是归一化理论是独立于领域提出的。也就是说,它被认为只是每个有问题的 JD 的分解。所以“1NF”也被用来作为一种关系。其他“NF”的使用与域无关。 (尽管如果存在关系值域,则可能存在与 FD 和 JD 不同但相似的约束,它们会导致不同但相似的异常,并且即使在分解所有有问题的 JD 之后,也会导致组件中的约束和异常。)无论是否关系具有关系值域,无论“1NF”或“规范化”或“规范化”是什么意思,您所遵循的将有问题的 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 并且它只依赖于 A。因为 A -> C 意味着 A,B -> C。

关于database - 3NF 的综合算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32006777/

相关文章:

php - 从 PHP 到 PHPMYADMIN 的 DOB 集合

c# - mysql查询需要5分钟以上

database - 在员工、经理和部门关系中实现参照完整性

Haskell 没有得到我的功能依赖

database - 数据库中的功能依赖性

MySQL 8 不检测选择不同查询中的功能依赖性

sql - foo.foo : Is giving a table column the same name as the table itself a bad idea?

php - 如何将行插入 mysql 数据库?

php - 在 Yii2 中设置非规范化列的最佳实践

mysql - 将数据库标准化为 3NF