第四范式(4NF)

2025年5月26日 | 阅读 3 分钟

引言

在讨论第四范式之前,应该了解多值依赖。这是第一范式(1NF)的一个结果,它不允许一个元组中的一个属性包含一组值。

到目前为止开发的范式只处理函数依赖。对于一个处于3NFBCNF的关系,在更新、插入和删除时仍然可能出现异常。当多值依赖未得到妥善处理时,就会发生这种情况。为了消除由这些依赖引起的异常,引入了第四范式(4NF)的概念。

  • 如果一个关系处于 Boyce Codd 范式并且没有多值依赖,则该关系就处于 4NF。
  • 对于依赖 A → B,如果 A 的一个值存在多个 B 的值,则该关系为多值依赖。

为了解释 4NF 的概念,让我们考虑下面的“员工关系”。该关系包含所有三个属性,并充当主键,因为没有单个属性可以唯一标识一条记录。

Emp_Name设备语言
Anurag个人电脑英文
Anurag个人电脑法语
Anurag大型机英文
Anurag大型机法语
Kapil个人电脑英文
Kapil个人电脑法语
Kapil个人电脑日本人

Empname 和 Equipment 之间的关系是多值依赖,因为在 Employee 关系中,对于每一对 (Emp_name, Language) 值,相关的 Equipment 值集仅由 Empname 确定,并且独立于 Language。

Equipment Anurag, English = Equipment Anurag, French = { 个人电脑, 大型机 }

Equipment Kapil, English = Equipment Anurag, French = { 个人电脑, 大型机 } = Equipment Kapil , Japanese = { 个人电脑 }

因此,这表明

Emp_Name ->-> Equipment

类似地,Emp_name 和 Language 之间的关系是多值依赖,表示为

Emp_Name ->-> Language

因此,为了将具有多值依赖的表转换为 4NF,请将每个多值依赖对移到一个新关系中,如下所示。

Emp_Equip

Emp_Name设备
Anurag个人电脑
Anurag大型机
Kapil个人电脑

Emp_Lang

Emp_Name语言
Anurag英文
Anurag法语
Kapil英文
Kapil法语
Kapil日本人

因此,我们看到源关系 Employee 无损地分解为子关系。

Emp_Equip (@Emp_name + @Equipment)

Emp_Lang (@Emp_name + @Langauge)

其中 @ 符号表示主键。

生成的关系 Emp_Equip(分配给员工的各种设备)和 Emp_Lang(员工熟悉的各种语言)都处于 4NF。

示例 2

学生

STU_ID课程爱好
21电脑跳舞
21数学唱歌
34化学跳舞
74生物学板球
59物理曲棍球

给定的 STUDENT 表处于 3NF,但 COURSE 和 HOBBY 是两个独立实体。因此,COURSE 和 HOBBY 之间没有关系。

在 STUDENT 关系中,STU_ID 为 **21** 的学生有两门课程 **Computer** 和 **Math**,以及两个爱好 **Dancing** 和 **Singing**。因此,STU_ID 存在多值依赖,导致不必要的数据重复。

因此,为了将上述表转换为 4NF,我们可以将其分解为两个表

STUDENT_COURSE

STU_ID课程
21电脑
21数学
34化学
74生物学
59物理

STUDENT_HOBBY

STU_ID爱好
21跳舞
21唱歌
34跳舞
74板球
59曲棍球

关于 4NF 的常见问题解答

1. 列出 4NF 的各种好处?

  • 提高数据库性能
  • 消除数据冗余
  • 提高数据完整性

2. 实现 4NF 的技术有哪些?

实现 4NF 的各种技术如下所示:

  • 表分区
  • 创建附加表来表示多值属性。
  • 使用外键概念建立表之间的关系。

下一主题DBMS 5NF