面试题:数据库的三大范式是什么?

数据库的三大范式(Normalization)是关系数据库设计中的基本原则,用于减少数据冗余、提高数据一致性,并确保数据的完整性。以下是三大范式的详细说明:


1. 第一范式(1NF)

  • 定义
    • 表中的每一列都是不可再分的原子值,即每一列都是单一值,不能包含数组、集合或重复的列。
  • 要求
    • 每个字段的值都是原子的,不可再分。
    • 每一行都是唯一的,通常通过主键来保证。
  • 示例
    • 不符合 1NF 的表:学生ID学生姓名课程1张三数学, 英语2李四物理
    • 符合 1NF 的表:学生ID学生姓名课程1张三数学1张三英语2李四物理

2. 第二范式(2NF)

  • 定义
    • 在满足 1NF 的基础上,表中的每一列都必须完全依赖于主键,而不是部分依赖。
  • 要求
    • 表必须有主键。
    • 非主键列必须完全依赖于主键,而不是依赖于主键的一部分(针对复合主键的情况)。
  • 示例
    • 不符合 2NF 的表:学生ID课程ID学生姓名课程名称成绩1101张三数学901102张三英语85
      • 问题:学生姓名 只依赖于 学生ID,而 课程名称 只依赖于 课程ID,存在部分依赖。
    • 符合 2NF 的表:
      • 学生表:学生ID学生姓名1张三
      • 课程表:课程ID课程名称101数学102英语
      • 成绩表:学生ID课程ID成绩110190110285

3. 第三范式(3NF)

  • 定义
    • 在满足 2NF 的基础上,表中的每一列都必须直接依赖于主键,而不能存在传递依赖。
  • 要求
    • 非主键列之间不能有依赖关系,即不能存在“A 依赖于 B,B 依赖于主键”的情况。
  • 示例
    • 不符合 3NF 的表:学生ID学生姓名学院ID学院名称1张三101计算机学院2李四102数学学院
      • 问题:学院名称 依赖于 学院ID,而 学院ID 依赖于 学生ID,存在传递依赖。
    • 符合 3NF 的表:
      • 学生表:学生ID学生姓名学院ID1张三1012李四102
      • 学院表:学院ID学院名称101计算机学院102数学学院

4. 总结

范式要求目的
1NF每一列都是原子值,不可再分消除重复列,确保数据原子性
2NF在 1NF 的基础上,消除非主键列对主键的部分依赖消除部分依赖,确保数据完整性
3NF在 2NF 的基础上,消除非主键列之间的传递依赖消除传递依赖,减少数据冗余
  • 1NF 是基础,确保数据的原子性。
  • 2NF 确保非主键列完全依赖于主键。
  • 3NF 确保非主键列之间没有依赖关系。

5. 注意事项

  • 范式化的优缺点
    • 优点:减少数据冗余,提高数据一致性,易于维护。
    • 缺点:过度范式化可能导致查询性能下降(需要更多的 JOIN 操作)。
  • 反范式化
    • 在某些场景下(如数据仓库、高并发查询),为了提高性能,可以适当反范式化(Denormalization),允许一定的数据冗余。

在实际数据库设计中,通常需要根据业务需求和性能要求,在范式化和反范式化之间找到平衡。

THE END
点赞12 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容