3NF 与 2NF 的区别:非主属性的函数依赖关系
关系 R 是 3NF,当且仅当 R 是 2NF,并且所有非主属性都完全函数依赖于主键。
这句话的意思是,一个关系要满足 3NF,首先必须满足 2NF 的条件,即消除了部分函数依赖。在此基础上,3NF 还要求所有非主属性必须直接依赖于主键,而不能依赖于其他非主属性。
例如:
假设有一个关系模式 R(学号, 姓名, 院系, 院长),其中学号是主键。
- 学号 → 姓名:学号唯一确定姓名
- 学号 → 院系:学号唯一确定院系
- 院系 → 院长:院系唯一确定院长
可以看出,院长这个非主属性并不直接依赖于主键学号,而是依赖于院系这个非主属性。这就违反了 3NF 的要求,存在传递函数依赖。
为了满足 3NF,需要将 R 分解为两个关系模式:
- R1(学号, 姓名, 院系)
- R2(院系, 院长)
这样,所有非主属性都直接依赖于主键,满足了 3NF 的要求,消除了数据冗余和更新异常的风险。
原文地址: https://www.cveoy.top/t/topic/fYGI 著作权归作者所有。请勿转载和采集!