database - schema是什么 - 数据库是什么知乎




什么是数据库的正常形式,你可以举个例子吗? (3)

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是ENTIRE键。

Primary Key |

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

没有冗余!

3NF

好吧,让我们假设我们还将课程的老师的姓名以及他们的一些细节添加到关系数据库中:

|-----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中。 因此,每个额外的标准形式都要求低标准形式所具有的一切条件,以及一些必须全部满足的额外条件。

在关系数据库设计中,存在数据库规范化或简单规范化的概念,这是组织列(属性)和表(关系)以减少数据冗余并提高数据完整性的过程。 (如Wikipedia所写)。

由于大多数文章都是技术性的,因此很难理解,所以我要求某人根据关于1NF,2NF,3NF,甚至3.5NF(Boyce-Codd)的意思的例子来写一个更容易理解的解释。


1NF:每列只有一个值

2NF:表中的所有非主键列应取决于整个主键。

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

我在here更详细地写了一篇文章


这是一个快速,坦率的屠杀反应,但在一句话中:

1NF:您的表格被组织为一组无序的数据,并且没有重复的列。

2NF:由于另一列,您不会在表格的一列中重复数据。

3NF:表格中的每一列只与您的表格关键相关 - 您的表格中没有描述表格中另一列不是关键字的列。

有关更多详细信息,请参阅wikipedia ...





database-normalization