什么是数据库范式,你能举个例子吗?
在关系型数据库设计中,有一个数据库规范化或简称规范化的概念,即对列(属性)和表(关系)进行组织的过程,以减少数据冗余,提高数据完整性。(如维基百科上所写)。
由于大多数文章都有些技术性,因此更难理解,我要求有人根据关于 1NF、2NF、3NF 甚至 3.5NF(Boyce-
Codd)含义的示例写一个更易于理解的解释。
-
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 中。所以每一个额外的范式都需要低范式所具有的 一切
,加上一些额外的条件,这些 都 必须满足。
-
你了解什么是高阶组件吗?可否举个例子说明下?
2021-01-11 关注 0 浏览546 1答案
-
你了解什么是AOP吗?它的作用是什么?举个例子
2021-01-11 关注 0 浏览163 3答案
-
iOS你在项目中用过 runtime 吗?举个例子
2020-01-12 关注 0 浏览1219 2答案
-
在工作中,你会有犹豫的时候吗?举个例子说明下
2021-01-11 关注 0 浏览157 1答案
-
vue中什么是递归组件?举个例子说明下?
2021-01-11 关注 0 浏览1008 1答案
-
Java中的捕获转换是什么,任何人都可以举个例子吗?
2021-01-30 关注 0 浏览134 1答案
-
什么是闭包,举个例子说明一下?
2021-11-29 关注 0 浏览149 1答案
-
你是如何做竞品调研的?请举个例子说说。
2022-09-21 关注 0 浏览27 5答案
-
什么是闭包,举个例子说明一下
2021-09-18 关注 0 浏览101 1答案
-
子查询了解吗?如果子查询结果是单个数据这个怎么写?举个例子
2021-09-17 关注 0 浏览131 1答案