非主属性依赖部分主键与非主属性组合时数据表是否符合3NF
问题:存在非主属性依赖于部分主键与非主属性的组合时,数据表是否属于3NF?
相关数据表说明
Students表
| SID | SNAME |
|---|---|
| 1 | Adams |
| 2 | Jones |
| 3 | Smith |
| 4 | Baker |
Teachers表
| TID | TNAME |
|---|---|
| 60192 | Howser |
| 45869 | Langley |
Classes表
| CID | CNAME |
|---|---|
| IS318 | Database |
| IS301 | Java |
Student info表
该表使用SID与CID作为复合主键,表结构与数据如下:
| SID | CID | TID | Grade |
|---|---|---|---|
| 1 | IS318 | 60192 | A |
| 1 | IS301 | 45869 | B |
| 2 | IS318 | 60192 | A |
| 3 | IS318 | 60192 | B |
| 4 | IS301 | 45869 | A |
| 4 | IS318 | 60192 | A |
已知该表满足函数依赖:(SID,CID) → Grade、(SID,TID) → Grade,请问该表是否符合3NF要求?
回答
该表不符合3NF要求,甚至没有达到2NF的标准
- 先明确两个基础范式的核心要求:
2NF要求不存在非主属性对主键的部分函数依赖;3NF需要先满足2NF,同时不存在非主属性对主键的传递函数依赖。 - 该表的问题很明确:
从业务常识和给出的样例数据很容易看出来,CID可以唯一确定TID,也就是同一个课程的授课老师是固定的,即存在函数依赖CID → TID。此时非主属性TID仅依赖复合主键(SID,CID)中的CID字段,属于典型的非主属性对主键的部分依赖,直接就不满足2NF的要求,自然也不可能符合3NF的规范。 - 你提到的
(SID,TID) → Grade属于Grade的多路径决定关系,并不会消除上述的部分依赖问题,不影响最终判断。
如果要调整为符合3NF的结构,可以对表做拆分:
- 成绩表:字段为
SID、CID、Grade,主键为(SID,CID) - 课程教师映射表:字段为
CID、TID,主键为CID
拆分后的两个表都不存在部分依赖和传递依赖,符合3NF要求。
内容的提问来源于stack exchange,提问作者Shanmukha Reddy
相关产品推荐
相关产品推荐

