数据库范式

第一范式(1NF)

关系模型中实体的每个属性都是原子属性,即元组在每个属性上的取值是不可分的。也就是说这些属性的取值是单一的,不是集合、数组等非原子数据。当实体中的某个属性都多个值时,必须将该属性拆分为多个原子属性。

第二范式(2NF)

关系模型中的所有非主属性都完全依赖于所有的候选键。2NF其实就是在1NF的基础上消除那些非主属性对所有候选键的部分函数依赖。
例如,关系(学号,课程号,教师,成绩,学院)中,教师部分依赖于课程号,因此这个关系不满足第二范式,所以需要把上述关系拆分成(学号,课程号,成绩)和(课程号,教师,学院)。

第三范式(3NF)

关系模型中的非主属性既不部分函数依赖也不传递函数依赖于关系中的所有候选键。也就是说3NF是在2NF的基础上消除了非主属性对候选键的传递依赖关系。

还是上面的例子,关系(课程号,教师,学院)中存在传递依赖关系课程号->教师,以及教师->学院,因此不满足3NF。所以将其分解为(课程号,教师)和(教师,学院)。

巴斯-科德范式(BCNF)

对于关系R上的任何非平凡函数依赖X->Y都有X必包含R的某个候选键,那么就称关系R满足BCNF。BCNF是在第三范式的基础上继续消除主属性对于键的部分依赖和传递依赖。

举个例子来说,关系(课程名,班级,教师)中假定多名教师承担多个班级的教学任务,每个教师仅承担一个课程的教学任务,同时可以给多个班级上课,那么可以知道有函数依赖

1
2
(课程名,班级)->(教师)
(教师)->(课程名)

然而,上述关系中的主键是(课程名,班级)或者(教师,班级)。所以(教师)->(课程名)就是主属性对候选键的部分依赖,不满足BCNF。

第四范式(4NF)

对于关系R中的非平凡多值依赖X->->Y,X必包含R的某个候选键,则称满足4NF。

-------------本文结束感谢您的阅读-------------