跳转到内容

第四范式(4NF)

来自代码酷


第四范式(Fourth Normal Form, 4NF)是关系数据库规范化理论中的一种高级范式,用于消除多值依赖(Multivalued Dependency, MVD)导致的数据冗余。它是第三范式(3NF)的进一步扩展,适用于处理更复杂的数据关系。

简介[编辑 | 编辑源代码]

第四范式要求一个关系模式(表)必须满足以下条件: 1. 该表已满足第三范式(3NF)。 2. 表中不存在非平凡的多值依赖(Non-trivial Multivalued Dependency)。

多值依赖是指,对于表中的属性集合X、Y和Z,如果对于X的每一个值,Y的取值与Z的取值无关(即Y和Z相互独立),则称Y多值依赖于X(记作X →→ Y)。如果Z不为空(即Y和Z的取值不完全由X决定),则该多值依赖是非平凡的。

数学表达式为: XYZ

多值依赖的判定[编辑 | 编辑源代码]

多值依赖的判定可以通过以下规则:

  • 若X →→ Y,则X →→ Z(其中Z = R - X - Y)。
  • 若X → Y,则X →→ Y(即函数依赖是多值依赖的特例)。

4NF的规范化步骤[编辑 | 编辑源代码]

要将一个表规范化为4NF,需执行以下步骤: 1. 确保表已满足3NF。 2. 检查是否存在非平凡的多值依赖。 3. 若存在,则将表分解为多个表,每个表仅包含一个多值依赖。

示例[编辑 | 编辑源代码]

假设有一个表存储学生选修课程和兴趣爱好的信息:

|- | 学生ID || 课程 || 兴趣爱好 |- | S1 || 数学 || 足球 |- | S1 || 数学 || 音乐 |- | S1 || 物理 || 足球 |- | S1 || 物理 || 音乐 |- | S2 || 化学 || 绘画 |-

该表存在多值依赖:

  • 学生ID →→ 课程
  • 学生ID →→ 兴趣爱好

为了消除冗余,将其分解为两个表:

表1:学生-课程关系 |- | 学生ID || 课程 |- | S1 || 数学 |- | S1 || 物理 |- | S2 || 化学 |-

表2:学生-兴趣爱好关系 |- | 学生ID || 兴趣爱好 |- | S1 || 足球 |- | S1 || 音乐 |- | S2 || 绘画 |-

实际应用场景[编辑 | 编辑源代码]

4NF常用于以下场景: 1. 学生选课系统:学生与课程、兴趣爱好之间存在多值依赖。 2. 产品属性管理:产品与颜色、尺寸等多值属性。 3. 医疗记录:患者与诊断、药物等多值信息。

代码示例[编辑 | 编辑源代码]

以下是一个SQL示例,展示如何创建符合4NF的表:

-- 原始表(未规范化)
CREATE TABLE StudentInfo (
    StudentID INT,
    Course VARCHAR(50),
    Hobby VARCHAR(50),
    PRIMARY KEY (StudentID, Course, Hobby)
);

-- 规范化后的表(4NF)
CREATE TABLE StudentCourses (
    StudentID INT,
    Course VARCHAR(50),
    PRIMARY KEY (StudentID, Course)
);

CREATE TABLE StudentHobbies (
    StudentID INT,
    Hobby VARCHAR(50),
    PRIMARY KEY (StudentID, Hobby)
);

4NF与更高范式的区别[编辑 | 编辑源代码]

  • 4NF:消除非平凡多值依赖。
  • 第五范式(5NF):进一步消除连接依赖(Join Dependency)。

总结[编辑 | 编辑源代码]

第四范式是数据库设计中的重要概念,适用于处理多值依赖导致的数据冗余问题。通过分解表结构,可以提升数据的一致性和查询效率。对于初学者,建议先掌握1NF至3NF,再逐步学习4NF及更高范式。

参见[编辑 | 编辑源代码]