数据库设计中的“范式”(Normal Forms)4阶段

内容纲要

数据库设计中的“范式”(Normal Forms),具体是关系型数据库设计的四个阶段,也就是我们常说的第一范式(1NF)、第二范式(2NF)、第三范式(3NF)和BC范式(BCNF)

以下是这几个范式的核心要求,我们详细解释一下:


🧱 一、第一范式(1NF):原子性

要求

  • 所有字段值都是不可再分的原子值。
  • 每个字段只包含一个值,不能有重复组或数组。

反面例子

学号 姓名 课程
101 张三 数据库, 操作系统

修正为 1NF

学号 姓名 课程
101 张三 数据库
101 张三 操作系统

🔗 二、第二范式(2NF):非主键完全依赖主键

前提:必须先满足1NF。

要求

  • 所有非主键字段必须完全依赖于主键,而不是部分依赖。
  • 适用于复合主键的情况。

反面例子

学号+课程号(主键) 姓名 课程名 成绩
101, C01 张三 数据库 90

这里“姓名”只依赖“学号”,不依赖“课程号”,属于部分依赖

修正为 2NF
拆分成两个表:

学生表

学号(主键) 姓名
101 张三

选课表

学号+课程号(主键) 课程名 成绩
101, C01 数据库 90

🔄 三、第三范式(3NF):消除传递依赖

前提:必须先满足2NF。

要求

  • 非主键字段之间不能有传递依赖,即非主键字段A依赖非主键字段B,而B又依赖主键。

反面例子

学号(主键) 姓名 系名 系主任
101 张三 计科系 李老师

“系主任”依赖于“系名”,而“系名”又依赖于“学号”,形成传递依赖

修正为 3NF
拆分成两个表:

学生表

学号(主键) 姓名 系ID(外键)
101 张三 1

系表

系ID(主键) 系名 系主任
1 计科系 李老师

🧯 四、BC 范式(BCNF)

前提:比3NF更严格,是3NF的增强版。

要求

  • 每一个决定因素都必须是候选键
  • 消除了主键中的“部分依赖”和“传递依赖”的所有可能。

示例
如果存在一个字段能决定另一个字段,但它不是候选键,那就不符合BCNF。


✅ 总结表

范式 核心要求 目标
1NF 字段原子化,不可再分 消除重复组
2NF 非主键完全依赖主键 消除部分依赖
3NF 消除非主键间的传递依赖 消除传递依赖
BCNF 每个决定因素都是候选键 更严格的无冗余结构

高级软件工程师、高级大数据分析师、人工智能专家

Leave a Comment

您的电子邮箱地址不会被公开。 必填项已用*标注

close
arrow_upward