跳到主要内容

第四范式 (4NF)

什么是第四范式 (4NF)?

第四范式 (4NF) 是关系数据库规范化理论中的一个重要概念。它是第三范式 (3NF) 的进一步扩展,旨在消除多值依赖 (Multi-Valued Dependency, MVD) 带来的冗余和数据不一致问题。

简单来说,如果一个关系表已经满足第三范式 (3NF),并且没有多值依赖,那么它就满足第四范式 (4NF)。多值依赖是指在一个关系中,某个属性集的值决定了另一个属性集的多个值,而这些值之间没有直接的联系。

多值依赖 (MVD) 是什么?

多值依赖 (MVD) 是指在一个关系中,给定一个属性集 X,另一个属性集 Y 可以有多个值与之对应,而这些值之间没有直接的联系。换句话说,X 决定了 Y 的多个值,但这些值之间是独立的。

例如,考虑一个关系表 StudentCourses,其中包含学生的 ID、课程名称和教师名称。假设一个学生可以选修多门课程,而每门课程可以由多个教师教授。在这种情况下,StudentID 决定了 CourseNameTeacherName 的多个值,这就是一个多值依赖。

如何判断一个表是否满足 4NF?

要判断一个表是否满足 4NF,需要满足以下两个条件:

  1. 该表已经满足第三范式 (3NF)。
  2. 该表没有多值依赖 (MVD)。

如果表中有多值依赖,我们需要将其分解为多个表,以消除冗余和数据不一致。

4NF 的实际案例

让我们通过一个实际案例来理解 4NF 的应用。

案例:学生选课系统

假设我们有一个关系表 StudentCourses,其结构如下:

sql
StudentCourses (StudentID, CourseName, TeacherName)

假设数据如下:

StudentIDCourseNameTeacherName
1MathMr. Smith
1MathMs. Johnson
1PhysicsMr. Brown
2ChemistryMs. Davis
2ChemistryMr. Wilson

在这个表中,`StudentID` 决定了 `CourseName` 和 `TeacherName` 的多个值。例如,学生 1 选修了 Math 课程,而 Math 课程可以由 Mr. Smith 或 Ms. Johnson 教授。这就是一个多值依赖。

为了消除多值依赖,我们可以将表分解为两个表:

1. `StudentCourses` 表,只包含 `StudentID` 和 `CourseName`。
2. `CourseTeachers` 表,包含 `CourseName` 和 `TeacherName`。

分解后的表如下:

```sql
StudentCourses (StudentID, CourseName)
CourseTeachers (CourseName, TeacherName)

数据如下:

StudentCourses 表:

StudentIDCourseName
1Math
1Physics
2Chemistry

CourseTeachers 表:

CourseNameTeacherName
MathMr. Smith
MathMs. Johnson
PhysicsMr. Brown
ChemistryMs. Davis
ChemistryMr. Wilson

通过这种分解,我们消除了多值依赖,使得每个表都满足 4NF。

## 总结

第四范式 (4NF) 是关系数据库规范化理论中的一个重要概念,它通过消除多值依赖来减少数据冗余和提高数据一致性。要满足 4NF,表必须首先满足第三范式 (3NF),并且不能有多值依赖。

在实际应用中,4NF 可以帮助我们设计更加高效和可靠的数据库结构。通过分解表来消除多值依赖,我们可以确保数据的完整性和一致性。

## 附加资源与练习

### 练习

1. 考虑一个关系表 `EmployeeSkills`,其中包含员工的 ID、技能名称和证书名称。假设一个员工可以有多个技能,而每个技能可以有多个证书。请判断该表是否满足 4NF,如果不满足,请将其分解为满足 4NF 的表。

2. 设计一个关系表 `BookAuthors`,其中包含书籍的 ISBN、作者名称和出版社名称。假设一本书可以有多个作者,而每个作者可以属于多个出版社。请判断该表是否满足 4NF,如果不满足,请将其分解为满足 4NF 的表。

### 附加资源

- [数据库规范化 - 维基百科](https://zh.wikipedia.org/wiki/%E6%95%B0%E6%8D%AE%E5%BA%93%E8%A7%84%E8%8C%83%E5%8C%96)
- [数据库设计中的范式](https://www.geeksforgeeks.org/normal-forms-in-dbms/)

通过学习和练习,你将能够更好地理解和应用第四范式 (4NF) 的概念。