在关系数据库设计中,有一个数据库规范化或简单规范化的概念,即组织列(属性)和表(关系)以减少数据冗余并提高数据完整性的过程.(如第Wikipedia页所述).

由于大多数文章都有一定的技术性,因此更难理解,我要求有人根据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   |

这是not in 2NF,因为第四列不依赖于entire键-而只是它的一部分.课程名称取决于课程ID,但与选修哪个学期无关.因此,如您所见,我们有重复的信息-有几行告诉我们ITentire正在编程,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-所以这是not in 3NF.要解决此问题,我们的操作与2NF中的操作大致相同-从该表中取出TeacherName字段,并将其放入自己的字段中,该字段以TeacherID为键.

 Primary Key |

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

没有冗员!!

需要记住的一点是,如果某个东西不在1NF中,那么它也不在2NF或3NF中.因此,每一个额外的标准形都需要everything个较低的标准形,再加上一些额外的条件,这些条件必须满足all.

Database相关问答推荐

Metasploit 数据库警告

使用 Npgsql 执行年龄查询并在 .NET 应用程序中返回结果?

如何决定使用数据库事务

需要未提供的参数@ID?

基于邮政编码的纬度和经度

如何将开发数据库更改移动到生产数据库?

用于存储年份的 MySQL 类型:Smallint 或 Varchar 或 Date?

如何在 Products 表的主键和自然键之间做出决定?

用于获取存储在单个表中的 n 级父子关系的 Postgresql 查询

应用程序用户应该是数据库用户吗?

在 MySQL 存储过程中使用if和else

具有多列的单个固定表与灵活的抽象表

如何动态更改 Ruby on Rails 中所有模型的 Active Record 数据库?

传递依赖有什么问题?

如何在 SQL Server 中总结时间字段

MongoDB 是否支持浮点类型?

Codeigniter - 使用多个数据库

数据库 EAV 优点/缺点和替代方案

使用命令行在 Mysql 中导入压缩文件

获取 xp_cmdshell 的执行权限