2

While studying relational databases, I ran into this confusing page where the following snapshot summarizes my confusion:

I'm confused!

Why does the author say that Subject Table is in 1NF when student_id 401 and subject Math is repeated in the same way the blue depicts? This seems like a contradiction.

4

2 回答 2

4

Chris Date 在他的《数据库系统简介》,第 7 版,第 357 页一书中对 1NF 给出了正确而简洁的定义。

当且仅当在该 relvar 的每个合法值中,每个元组中的每个属性都恰好包含一个值时,一个 relvar 才属于 1NF。

出现在多个元组(多于一行)中的“一个值”不违反 1NF。在“学生表”中,每个元组(每一行)都包含每个属性的一个值。从样本数据中我们可以看出,它在 1NF 中。

在关系模型中,“一个值”可以是任意复杂的——录音、视频、工程图纸等(同上,第 114 页)

于 2013-06-04T23:54:31.067 回答
2

这个页面没有提到的关键概念是行中包含的数据不能重复,这意味着单个键值不能有单个列的多个值。真正的问题是,对于 401 的学生 ID,第一个表指定了两次名称。

最后一个表后面的文本应为“在主题表中,subject_id 和 student_id 的连接是主键”。新的主题表没问题的原因是因为键实际上是这两个值,所以在重复 401 时,键是 10, 401 和 11, 401,它们是两个不同的值。同样,数学是重复的,但它是两个单独键的数据;它不会在一行内重复。因为这些键值不同,所以没关系。

您引用的页面没有给出非常精确的定义。我希望这个解释有所帮助。继续检查其他网站以获得更清晰的了解。维基百科有一个很好的例子和一个精确的定义,虽然它有点抽象并且难以理解。 http://en.wikipedia.org/wiki/First_normal_form

于 2013-06-04T21:13:16.453 回答