【软考】-数据库
先上图一张:
键
概念:
超键:在关系中能唯一标识元组的属性集
候选键:能唯一标识元组,且不含多余属性(也可理解为不含多余属性的超键)
主键:被选作元组标识的候选键
主属性:候选键中的属性称为主属性
非主属性:非候选键中的属性成为非主属性
举例;
光看概念很抽象,通过例子来看就会变得明了,比如一个学生(学号,身份证号,姓名,性别,年龄,专业)
学号唯一,是一个超键;
身份证号唯一,是一个超键;
(学号,姓名)唯一,是一个超键;
(学号,姓名,性别)唯一,是一个超键;
(学号,姓名,性别,年龄)唯一,是一个超键
-------这里可以看出,超键有很多唯一组合,但是可能不是最小唯一
学号唯一,而且没有多余属性,是一个候选键;
身份证号唯一,而且没有多余属性,是一个候选键;
-------这里可以看出,候选键是没有多余属性的超键
主键是选中的超键,我们可以选择学号,也可以选择身份证号。
三范式
1NF
概念:关系(表)中的每个关系都是原子值,不可再分
例如:
在上表中,高级职称人数不是基本数据项,他可以分为教授和副教授两个基本数据项,我们只要把这两个基本数据项拆开就满足第一范式了,如下:
2NF
概念:在第一范式基础上,每一个非主属性完全依赖主键
例如:选课关系(学号,课程号,成绩,学分);组合键(学号,课程号)为主键;每个属性都是原子值,所以肯定是1NF;
但是关系中非主属性成绩仅函数依赖于课程号,也就是学分部分依赖于主键,而不是完全依赖。
我们需要把选课关系分为两个关系模式,选课关系(学号,课程号,成绩);学分(课程号,学分);这样,每个关系就不存在非主属性部分依赖与主键了。
3NF
概念:在第二范式的基础上,无非主属性对码的传递函数依赖
例如:学生(学号,姓名,所在系,系名称,系地址)。关键字学号决定各个属性。由于是单个关键字,没有部分依赖的问题,肯定是2NF。
但关系中存在传递依赖,学号→所在系,所在系→系地址。因此关键字学号对系地址是通过传递依赖实现的,也就是说,学号不是直接决定非主属性系地址。
将关系分为两个关系学生(学号,姓名,所在系);系(所在系,系名称,系地址),这样,每个关系中就不存在传递依赖了。