数据库第一范式是怎么回事?

文章导读
Previous Quiz Next 规范化是设计关系型数据库的关键原则之一。第一范式 (1NF) 是规范化过程中的基础步骤。它就像清理数据一样,确保一切整洁有序。阅读本章以了解 1NF 的含义、其重要性以及如何应用它。
📋 目录
  1. A 什么是第一范式?
  2. B 1NF 的重要性
  3. C 转换为第一范式的方法
  4. D 第一范式的实际益处
  5. E 结论
A A

数据库管理系统 (DBMS) 中的第一范式 (1NF)



Previous
Quiz
Next

规范化是设计关系型数据库的关键原则之一。第一范式 (1NF) 是规范化过程中的基础步骤。它就像清理数据一样,确保一切整洁有序。阅读本章以了解 1NF 的含义、其重要性以及如何应用它。

什么是第一范式?

第一范式是一组规则,确保表的结构保持简单和有组织。根据关系型数据库之父 E. F. Codd 的定义,如果表中不包含任何多值属性,则该表处于 1NF。用更简单的话说,每个单元格应只包含单个值,而不是值列表或集合。

想象一下,如果一个表中有一个列针对同一个人包含多个值,这就会出问题。例如,在 Student 表中,如果一个学生的单行列出了多个课程,则该表不处于 1NF。

非 1NF 表的示例

考虑以下表 −

Roll Number Name Course
1 Sayan C, C++
2 Harsh Java
3 Ankur C, DBMS

在这里,我们可以看到问题所在:Course 列对某些学生有多个值。例如,Sayan 同时选修了 C 和 C++,而 Ankur 选修了 C 和 DBMS。这违反了 1NF 的规则,该规则规定每列的每个行只能有一个值。

1NF 的重要性

不处于 1NF 的表可能会引起混淆。例如,查询此类表以查找所有选修“C++”的学生,可能会遗漏某些行。此外,更新数据会变得混乱。想象一下,要为一个学生添加新课程,该如何在一个单元格中管理它?

通过将表转换为 1NF,我们可以消除这些问题,使数据更容易管理和查询。

转换为第一范式的方法

有三种不同的方法可以修复表格并将其转换为 1NF −

  • 拆分具有重复值的行
  • 为多值属性添加单独的列
  • 将表格分为两个

让我们使用上面的示例,详细了解每种方法。

方法 1:拆分具有重复值的行

将表格转换为 1NF 的最简单方法是将具有多个值的行分解为单独的行。对于 Student 表格,它将如下所示 −

Roll Number Name Course
1 Sayan C
1 Sayan C++
2 Harsh Java
3 Ankur C
3 Ankur DBMS

修改后,每行在 Course 列中只包含一个值。这修复了 1NF 违规。但有一个有趣的点需要注意:如果我们被要求识别 primary key,我们会发现 Roll Number 单独使用是不够的,因为它对某些学生会重复。相反,需要一个 composite primary key。这是 Roll Number 和 Course 的组合。这是为了唯一标识每行。

注意 − 拆分行简单直接,但可能导致数据冗余。

方法 2:为多值属性添加单独的列

另一种方法是为多个值创建额外的列。例如 −

Roll Number Name Course 1 Course 2
1 Sayan C C++
2 Harsh Java
3 Ankur C DBMS

在这里,每门课程都有自己的列。这种结构确保每个单元格只包含一个值,满足 1NF 条件。然而,这种方法有一些 限制

  • 如果一个学生选修超过两门课程,我们需要添加更多列。
  • 某些单元格可能为空 (NULL),这会导致空间使用效率低下。

在这种情况下,primary key 将是 Roll Number,因为它唯一标识每行。但为每个可能的值添加太多列对于大型数据集来说并不实用。

注意 − 添加新列适用于小型、固定数据集,但对于可变长度的属性不具备可扩展性。

方法 3:将表格分为两个

第三种方法通常是 最佳 的 − 它将表格拆分为两个独立的表格。这样,我们可以在无冗余的情况下规范化数据。以下是其工作原理 −

基础表格(存储学生详细信息) −

Roll Number Name
1 Sayan
2 Harsh
3 Ankur

引用表格(存储课程注册信息) −

Roll Number Course
1 C
1 C++
2 Java
3 C
3 DBMS

在这种设计中 −

  • 基础表格 使用 Roll Number 作为其 primary key。
  • 引用表格 使用 Roll NumberCourse 的组合作为其 primary key。
  • 引用表格中的 Roll Number 也是一个 foreign key,指向基础表格。

这种方法更灵活。如果一个学生选修多门课程,我们只需在引用表格中添加更多行,而无需修改基础表格。

注意 − 分割表格是一种干净且可扩展的方法,适用于复杂数据集。

第一范式的实际益处

通过将表格转换为 1NF,我们确保了以下内容 −

  • 一致性 − 数据以统一格式存储。
  • 简单性 − 查询更容易编写和理解。
  • 可扩展性 − 结构可以在无需重大重新设计的情况下处理增长。

实现 1NF 是迈向更高规范化水平的第一步。

结论

在本章中,我们介绍了数据库设计中的第一范式 (1NF) 概念。我们从定义 1NF 及其重要性开始。

通过一个示例,我们演示了多值属性如何违反 1NF,并探讨了三种修复问题的方法:拆分具有重复值的行、为多值属性添加单独的列,以及将表格分为基础表格和引用表格。每种方法都有其优缺点,但将表格分为两个通常是最实用的解决方案。