第三范式 (3NF)定义
3NF建立在2NF之上,它要求所有的非主键列都必需直接依赖于主键,不包括任何传递依赖(Transitive Dependency)。这里的传递依赖指的是从A→B,B→C,所以可以从A→C。具体含意参见以下示例。
举例来说明,比如有课程Student表如下所示。
【Student 表】
学生编号 | 学生姓名 | 户口所在地 | 户口所在省 |
---|---|---|---|
1 | 张小成 | 合肥 | 安徽 |
2 | 李百义 | 南京 | 江苏 |
3 | 王右佐 | 保定 | 河北 |
在这张表中通常学生编号
就能确定学生户口所在地
,而通过户口所在地
即可确定户口所在省
。即学生编号
→户口所在地
→户口所在省
,所以 学生编号
与 户口所在省
是传递依赖关系,户口所在省
就是冗余的。
修改
【Student 表】
学生编号 | 学生姓名 | 户口所在地 |
---|---|---|
1 | 张小成 | 合肥 |
2 | 李百义 | 南京 |
3 | 王右佐 | 保定 |
小结
3NF是指一个表中的列应该与主键或者这个表所表示的对象直接关联,而不是间接关联。这样,才能够将依赖降低至最小,从而便于数据的日常管理和维护。
相关文章
[1] 三大范式详解,https://www.cnblogs.com/ktao/p/7775100.html
[2] https://www.tutorialspoint.com/sql/second-normal-form.htm
[3] https://www.studytonight.com/dbms/database-normalization.php