问答题459/1053说一说三个范式

难度:
2021-11-02 创建

参考答案:

数据库的**三个范式(Normalization)**是指对数据库表进行规范化处理,以消除冗余数据、减少数据不一致性,并提高数据的完整性。每个范式都解决了特定类型的数据冗余和异常问题。下面是前三个范式的简要介绍:

1. 第一范式(1NF)—— 消除重复的列

第一范式要求每个表中的每个字段都必须是原子的(atomic),即列中的每个值都必须是不可再分的基本数据类型。换句话说,一个字段中不能包含多个值或多个属性,也不能是集合、数组或列表等复杂数据类型。

  • 要求
    • 每列的数据必须是原子的,不能拆分成多个部分。
    • 每行的数据应该是唯一的。

例子: 假设有一个“学生课程”表,记录学生的姓名和他们所选的课程:

学生姓名课程1课程2
张三数学英语
李四语文化学

这个表不符合1NF,因为“课程1”和“课程2”不是原子的。将其转换为1NF后,表应该变成:

学生姓名课程
张三数学
张三英语
李四语文
李四化学

2. 第二范式(2NF)—— 消除部分依赖

第二范式要求在满足1NF的基础上,消除表中的部分依赖。具体来说,如果表中有复合主键(由多个列构成的主键),则每个非主键列必须完全依赖于主键,而不能仅依赖于主键的一部分。换句话说,所有非主键列必须依赖于主键的整个组合,而不是其中的某个部分。

  • 要求
    • 必须满足1NF。
    • 每个非主键列必须依赖于主键的全部,而不是部分主键。

例子: 假设有一个“学生课程成绩”表,记录学生、课程和成绩:

学生姓名课程教师成绩
张三数学王老师85
张三英语李老师90
李四数学王老师78

其中,主键是“学生姓名”和“课程”组合。教师的列仅依赖于课程而不是学生姓名,因此存在部分依赖。为了消除部分依赖,可以将“教师”列拆分到另一个表中:

  • 学生课程成绩表:
    学生姓名课程成绩
    张三数学85
    张三英语90
    李四数学78
  • 课程教师表:
    课程教师
    数学王老师
    英语李老师

3. 第三范式(3NF)—— 消除传递依赖

第三范式要求在满足2NF的基础上,消除传递依赖。传递依赖是指,某个非主键字段依赖于另一个非主键字段,而不是直接依赖于主键。如果表中存在传递依赖,就需要进一步拆分表结构,以确保每个非主键字段都直接依赖于主键。

  • 要求
    • 必须满足2NF。
    • 每个非主键列直接依赖于主键,不能通过其他非主键列传递依赖。

例子: 假设有一个“学生课程成绩”表,记录学生、课程、教师和教师的办公室位置:

学生姓名课程教师办公室位置
张三数学王老师A101
张三英语李老师B102
李四数学王老师A101

其中,“办公室位置”是依赖于“教师”的,而“教师”又是依赖于“课程”的,因此存在传递依赖。为了消除传递依赖,可以将“教师”和“办公室位置”拆分到一个新的表中:

  • 学生课程成绩表:
    学生姓名课程教师
    张三数学王老师
    张三英语李老师
    李四数学王老师
  • 教师办公室表:
    教师办公室位置
    王老师A101
    李老师B102

最近更新时间:2024-12-09