1NF | 第一范式
表的每一个单元格都是不可再细分的项(原子性),换句话说不可大表套小表。这是一张表可以成为关系表的前提,不满足第一范式的表不是关系表。
2NF | 第二范式
在满足第一范式的前提下, 若关系中每一个非主属性都完全依赖于任何一个候选码(即不存在部分依赖),则该关系满足第二范式。
例:
Student(
Sno 学号 候选码
Cno 课程号 候选码
Grade 成绩
Sdept 专业
Sloc 宿舍号
)
我们假设同一专业的学生都居住在同一个宿舍中。那么有以下的函数依赖关系:
可以看出Sdept和Sloc对两个候选码是部分函数依赖关系,那么在增删改时就容易出现问题。
解决方式:投影分解法: 将一张表中部分依赖于某些候选码的属性与对应的候选码单独拆开成新表。
SC(Sno, Cno, Grade)
SL(Sno, Sdept, Sloc)
这样就产生了两个满足第二范式的关系。
3NF | 第三范式
在满足第二范式的前提下,若关系中不存在传递函数依赖,则该关系满足第三范式。
例:
上文中的
SL(Sno, Sdept, Sloc)
学号可以决定专业和所住的宿舍,同时宿舍也被专业决定了,这就存在传递函数依赖。
需要注意的是,若X←→Y,X→Y→Z,这种情况并不是传递函数依赖。
解决方式依然是拆分,将X→Y→Z拆分成X→Y与Y→Z两个关系。
SD(Sno, Sdept)
DL(Sdept, Sloc)
这样就得到了两个满足第三范式的关系。