什么是数据库范式,你能举例吗? [已关闭]

问题描述 投票:0回答:4

在关系数据库设计中,有一个数据库规范化或者简称规范化的概念,它是组织列(属性)和表(关系)以减少数据冗余并提高数据完整性的过程。 维基百科

基于 1NF、2NF、3NF 和 3.5NF (Boyce-Codd BCNF) 含义的示例解释是什么?

database database-design database-normalization
4个回答
454
投票

1NF 是最基本的范式 - 表格中的每个单元格必须仅包含一条信息,并且不能有重复的行。

2NF 和 3NF 都是关于主键的依赖。回想一下,主键可以由多个列组成。正如克里斯在回应中所说:

数据取决于密钥 [1NF]、整个密钥 [2NF],除了密钥 [3NF] 之外什么都没有(所以请帮助我 Codd)。

2NF

假设您有一个包含某个学期所修课程的表,并且您有以下数据:

|-----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 是整个键。

Primary Key |

CourseID    |  Course Name |
---------------------------|
IT101       | Programming  |
IT102       | Databases    |
IT103       | Web Design   |

无冗余!

3NF

好吧,假设我们还将课程老师的姓名以及有关他们的一些详细信息添加到 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,而 TeacherID 不是主键的一部分 - 所以这不在 3NF 中。为了解决这个问题,我们做了与 2NF 中相同的操作 - 将 TeacherName 字段从该表中取出,并将其放入自己的表中,其中以 TeacherID 作为键。

 Primary Key |

 TeacherID   | TeacherName  |
 ---------------------------|
 332         |  Mr Jones    |
 495         |  Mr Bentley  |
 242         |  Mrs Smith   |

无冗余!!

要记住的一件重要事情是,如果某件事不属于 1NF,那么它也不属于 2NF 或 3NF。因此,每个附加的范式都需要较低范式所具有的所有,以及一些必须满足所有的额外条件。


130
投票

我对准确措辞的记忆力一直不好,但在我的数据库课上,我认为教授总是这样说:

数据取决于密钥 [1NF]、整个密钥 [2NF],仅取决于密钥 [3NF]。


51
投票

这是一个快速的、不可否认的“屠宰”回应,但一句话: 1NF:您的表被组织为无序的数据

,并且没有重复的列。 2NF:您不会因为另一列而在表的某一列中重复数据。

3NF:表中的每一列仅与表的键相关——表中不会有一列描述表中不是键的另一列。

有关更多详细信息,请参阅维基百科...


39
投票

2NF:表中所有非主键列都应该依赖于整个主键。

3NF:表中的所有非主键列应直接依赖于整个主键。

我在

这里

写了一篇更详细的文章

© www.soinside.com 2019 - 2024. All rights reserved.