什么是1NF真的?

时间:2013-06-04 20:51:52

标签: relational-database database-normalization

在研究关系数据库时,我遇到了this confusing page,其中以下快照总结了我的困惑:

I'm confused!

当学生_id 401和主题数学以蓝色描述的方式重复时,作者为什么说主题表在1NF?这似乎是一个矛盾。

2 个答案:

答案 0 :(得分:4)

Chris Date在他的书数据库系统简介,第7版,第357页中给出了1NF的正确和简明的定义。

  

当且仅当在每个合法值的情况下,relvar在1NF中   relvar,每个元组只包含每个属性的一个值。

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

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

答案 1 :(得分:2)

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

最后一个表后面的文字应该是"在主题表中,subject_id和student_id的连接是主键"。新主题表正常的原因是因为键实际上都是这两个值,所以当重复401时,键是10,401和11,401,这是两个不同的值。同样,重复数学,但它是两个独立键的数据;它不会连续重复。因为这些关键值不同,所以没关系。

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