什么是数据库范式,你能举个例子吗?

发布于 2022-05-26 23:13:44

在关系型数据库设计中,有一个数据库规范化或简称规范化的概念,即对列(属性)和表(关系)进行组织的过程,以减少数据冗余,提高数据完整性。(如维基百科上所写)。

由于大多数文章都有些技术性,因此更难理解,我要求有人根据关于 1NF、2NF、3NF 甚至 3.5NF(Boyce-
Codd)含义的示例写一个更易于理解的解释。

关注者
0
被浏览
24
1 个回答
  • 面试哥
    面试哥 2022-05-26
    为面试而生,有面试问题,就找面试哥。

    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

    好的,假设我们还将课程老师的姓名以及有关他们的一些详细信息添加到 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 中。所以每一个额外的范式都需要低范式所具有的 一切
    ,加上一些额外的条件,这些 必须满足。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看