关键码:
- 超键:在关系中能唯一标识元组的属性或属性集称为关键模式的超键。
- 候选键:不含有多余属性的超键称为候选键。也就是在候选键中在删除属性就不是键了。
- 主键:用户选作元组标识的候选键称为主键。一般不加说明,键就是指主键。
- 外键:如果模式R中属性K是其他模式的主键,那么K在模式R中称为外键。
函数依赖关系:
存在关系:
R学号,姓名,性别,班级,班主任,课号,课名,成绩)
主键:学号,课号
主属性:{学号,课号}
非主属性:{姓名,性别,班级,班主任,课名,成绩}
- 完全函数依赖,{学号,课号}–>成绩,{学号,课号}可以决定成绩,但只有学号或是只有课号无法决定成绩。
- 部分函数依赖,{学号,课号}–>姓名,只有学号就能决定姓名 课号是冗余的) 。
- 传递函数依赖,{学号,课号}–>班主任,班主任依赖于班级,因班级依赖于学号,所以班主任间接依赖于学号。
第一范式(1NF)
数据库的每一列都是不可分割的基本数据项,强调列的原子性。即列不可以再拆分。反例:
ID | 姓名 | 联系方式 | |
电话 | 邮箱 | ||
1 | 张三 | 188XXXXXXXX | XXX@163.COM |
第二范式(2NF)
建立在第一范式的基础上,每一个非主属性要完全函数依赖于候选键(或者说是主键,任一个候选键都可以做主键)。即非主键列完全依赖于主键,而不能是依赖于主键的一部分,必须满足两个条件:
- 必须有一个主键。
- 没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。
第三范式(3NF)
建立在第二范式的基础上,任何非主属性不依赖于其它非主属性。即每一个非主属性都不传递依赖于该范式的候选键。即非主键列只依赖于主键,不依赖于其他非主键。
BC范式(BCNF)
建立第三范式的基础上,任何非主属性不能对主键子集依赖。即数据库表中如果不存在任何字段对任一候选键的传递函数依赖则符合BC范式。
总结:
1NF消去对主键的部分函数依赖后=2NF。
2NF消去对主键的传递函数依赖后=3NF。
3NF消去对候选键的部分函数依赖和传递函数依赖后 = BCNF。
BCNF是对3NF的改进,即在3NF的基础的又把范围从主码扩大为候选码。