Answers:
1NF是最基本的普通格式-表中的每个单元格只能包含一条信息,并且不能有重复的行。
2NF和3NF都依赖于主键。回想一下,主键可以由多列组成。正如克里斯在回应中所说:
数据取决于键[1NF],整个键[2NF]和什么都只有键[3NF](所以请帮我Codd)。
假设您有一张表格,其中包含某个学期修读的课程,并且您具有以下数据:
|-----Primary Key----| uh oh |
V
CourseID | SemesterID | #Places | Course Name |
------------------------------------------------|
IT101 | 2009-1 | 100 | Programming |
IT101 | 2009-2 | 100 | Programming |
IT102 | 2009-1 | 200 | Databases |
IT102 | 2010-1 | 150 | Databases |
IT103 | 2009-2 | 120 | Web Design |
这不在2NF中,因为第四列不依赖于整个密钥-而是仅依赖于一部分。课程名称取决于课程的ID,但与课程的学期无关。因此,如您所见,我们有重复的信息-几行告诉我们IT101正在编程,而IT102是数据库。因此,我们通过将课程名称移到另一个表中来解决该问题,其中CourseID是ENTIRE键。
Primary Key |
CourseID | Course Name |
---------------------------|
IT101 | Programming |
IT102 | Databases |
IT103 | Web Design |
没有冗余!
好的,假设我们还将课程老师的姓名以及有关他们的一些详细信息添加到RDBMS中:
|-----Primary Key----| uh oh |
V
Course | Semester | #Places | TeacherID | TeacherName |
---------------------------------------------------------------|
IT101 | 2009-1 | 100 | 332 | Mr Jones |
IT101 | 2009-2 | 100 | 332 | Mr Jones |
IT102 | 2009-1 | 200 | 495 | Mr Bentley |
IT102 | 2010-1 | 150 | 332 | Mr Jones |
IT103 | 2009-2 | 120 | 242 | Mrs Smith |
现在希望可以很明显地看到TeacherName依赖于TeacherID-因此这不在3NF中。要解决此问题,我们所做的工作与2NF中的操作大致相同-从该表中取出TeacherName,然后将其放在自己的字段中,该字段以TeacherID为键。
Primary Key |
TeacherID | TeacherName |
---------------------------|
332 | Mr Jones |
495 | Mr Bentley |
242 | Mrs Smith |
没有冗余!
要记住的重要一件事是,如果某物不在1NF中,那么它也不在2NF或3NF中。因此,每个其他范式都需要较低范式具有的所有内容,以及一些必须全部满足的额外条件。
我从来没有对确切的措辞有很好的记忆,但是在我的数据库课程中,我认为教授总是说过这样的话:
数据取决于密钥[1NF],整个密钥[2NF]和仅密钥[3NF]。
The data depends on the key [1NF], nothing but the key [3NF]
呢?请不要混淆我们,因为1个SENSENSE答案并不能阐明答案,但会混淆访客!
这是一个快速的,公认的屠杀回应,但只用一句话:
1NF:您的表被组织为无序的数据集,并且没有重复的列。
2NF:您不会因为另一列而在表的一列中重复数据。
3NF:表中的每一列都只与表的键相关-表中没有列来描述表中不是键的另一列。
有关更多详细信息,请参见Wikipedia...。