第一范式(1NF):
确保每列都是原子性的,即每一列都不可再分。
表中的每一列都包含单一的值,而不是集合或数组。
第二范式(2NF):
必须满足第一范式。
所有非主键列都必须完全依赖于整个主键,而不是依赖于主键的一部分(对于复合主键的情况)。
第三范式(3NF):
必须满足第二范式。
所有非主键列都必须直接依赖于主键,而不是依赖于其他非主键列(即没有传递依赖)。
假设我们有一个学生选课的表,包含以下字段:学号、学生姓名、课程号、课程名称、成绩。
这个表的主键是(学号,课程号),因为一个学生可以选择多门课程,一门课程可以被多个学生选择。
检查范式:
1NF:每个字段都是原子性的,满足。
2NF:非主键字段(学生姓名、课程名称、成绩)必须完全依赖于主键。但是,学生姓名只依赖于学号,而不依赖于课程号;课程名称只依赖于课程号。因此,存在部分依赖,不满足2NF。
为了满足2NF,我们可以将表拆分为:
学生表(学号,学生姓名)
课程表(课程号,课程名称)
选课表(学号,课程号,成绩)
现在,每个表都满足2NF。
3NF:检查每个表是否满足3NF,即不存在传递依赖。
在学生表中,学号是主键,学生姓名直接依赖于学号,没有传递依赖,满足3NF。
在课程表中,课程号是主键,课程名称直接依赖于课程号,满足3NF。
在选课表中,主键是(学号,课程号),成绩依赖于整个主键,满足3NF。
因此,拆分后的表满足3NF。