Skip to main content

任务六 关系模式的规范化

一、规范化的核心背景与定义

1. 问题根源

未规范化的关系模式会引发四大问题:数据冗余大数据更新不一致插入异常删除异常

2. 规范化定义

关系模式的规范化是指通过模式分解,将低级范式的关系转换为若干个高级范式关系的过程,以此消除数据冗余和操作异常。

3. 范式(Normal Form, NF)

范式是衡量关系模式优劣的规则集合,级别越高,约束条件越严格,数据冗余和异常的风险就越小。高一级范式是在低一级范式的基础上增加额外约束,因此满足高一级范式必然满足低一级范式。 常见的范式包括:1NF、2NF、3NF、4NF、5NF、BCNF,一般数据库设计满足**第三范式(3NF)**即可。


二、核心范式详解

1. 第一范式(1NF)

  • 定义:关系模式中的所有属性都是不可再分的数据项(即原子性)。
  • 地位:关系数据库的最基本要求,任何关系必须满足1NF。
  • 局限:仅满足1NF仍可能存在数据冗余和操作异常,需要进一步规范化。

2. 第二范式(2NF)

  • 定义:在满足1NF的基础上,每个非主属性都完全依赖于关系的码(消除非主属性对码的部分依赖)。
  • 判断方法:分析非主属性对码的函数依赖,检查是否存在仅依赖码的一部分的情况。
  • 分解方法:将存在部分依赖的非主属性分离到新的关系中,使每个关系的非主属性都完全依赖于自身的码。
  • 示例:“学生课程成绩”关系(学号,课程号,姓名,成绩等)分解为: 学生_班级(学号, 姓名, 性别, 专业, 班级名, 班主任) 课程(课程号, 课程名, 课时) 成绩(学号, 课程号, 成绩)
  • 结论:满足2NF必然满足1NF;若关系无主属性、候选码为单属性,或仅包含两个属性,则自动满足2NF。

3. 第三范式(3NF)

  • 定义:在满足2NF的基础上,每个非主属性既不部分依赖于码,也不传递依赖于码(消除非主属性对码的传递依赖)。
  • 判断方法:分析非主属性对码的函数依赖,检查是否存在“码→属性A→属性B”的传递依赖。
  • 分解方法:将存在传递依赖的非主属性分离到新的关系中,消除传递依赖。
  • 示例:“学生_班级”关系(学号,姓名,班级名,班主任)分解为: 学生(学号, 姓名, 性别, 专业, 班级名) 班级(班级名, 班主任)
  • 结论:满足3NF必然满足2NF和1NF;若关系无主属性或仅包含两个属性,则自动满足3NF。

三、范式层级与设计原则

  • 层级关系1NF ⊂ 2NF ⊂ 3NF ⊂ BCNF ⊂ 4NF ⊂ 5NF,高一级范式是低一级范式的子集。
  • 设计原则:一般数据库设计只需满足3NF即可,它在消除冗余和保证性能之间取得了较好的平衡。