
第一范式是属性不可分;
第二范式是在第一范式的基础上,要求实体的属性完全依赖于主关键字,没有部分依赖;
第三范式是在第二范式的基础上,所有属性都和主键有直接关系,没有传递依赖。
- 部分函数依赖:设X, Y是关系R的两个属性集合,存在X→Y,若X’是X的真子集,存在X’→Y,则称Y部分函数依赖于X。例子:通过AB能得出C,通过A也能得出C,通过B也能得出C,那么说C部分依赖于AB。
- 完全函数依赖:设X, Y是关系R的两个属性集合,X’是X的真子集,存在X→Y,但对每一个X’都有X’!→Y,则称Y完全函数依赖于X。例子:通过AB能得出C,但是A、B单独得不出C,那么说C完全依赖于AB。
- 传递函数依赖:设X, Y, Z是关系R中互不相同的属性集合,存在X→Y(Y!→X), Y→Z,则称Z传递函数依赖于X。例子:通过A得到B,通过B得到C,但是C得不到B,B得不到A,那么称C传递依赖于A 。
如何理解部分依赖?
- 前提:存在「复合主键」
(学号, 课程号)(复合主键,因为一个学生可以选多门课,一门课可以被多个学生选,需要两者共同确定一条记录)
举例:
- 表
选课(学号,课号,课程名,成绩) ,其中 (学号,课号) 为复合主键,那么「课程名」就是部分依赖于「课号」
如何理解传递依赖?
举例:
- 表
学生(学号, 姓名, 学院, 院长),主键为学号。
- 如果
院长依赖于学院,而学院依赖于学号,则存在传递依赖(学号→学院→院长),违反3NF。