1.码或键
通过属性或者属性组区分两个不同的元组,这样的属性或者属性组称为码或键。比如:一个学生表中,可以通过学号这一个属性区分不同学生,也可以通过(学号、身高、性别)这一属性组来区分不同学生
2.超码或超键
如果有个码,可以去掉其中某个属性,它依然是这个关系的码,那么这样的码是超码。比如:(学号、身高、性别)这里面去掉性别依然可以区分不同学生。每个关系默认最少一个超码,因为一个表不能只有一列,默认的超码就是这个表的所有属性的集合
3.候选码或候选键
对应超码去理解,如果有个码,不能移除任一属性,否则就不是码了,这样就是候选码。比如:一个学生表中,单独一个学号属性可以是候选码,候选码就是最小超码,候选码不代表就只能是一个属性,假设一个学生表中存在姓名相同,身高不同的两个人,那么(姓名、身高)这一属性组就可以称为候选码,所以一个表可能有多个候选码,最少得有一个
4.主码或主键
通常说主键,在候选码中选最小的那个,比如学号,身份证号,选其中一个就可以
5.全码或主键
当一个表中所有属性的集合才是这个表的候选码,那么可以称为全码,比如:性别、年龄、年级、身高,如果这四个属性一起才能确认一条元组,那么这个属性的集合就是这个关系的主码
6主属性和非主属性
关系中任意一个候选码中的属性为主属性,不在任一候选码中的属性为非主属性
举例说明:
创建一个成绩表
数据如下
码:(学号、学科、成绩) 、(学号、学科)
超码:(学号、学科、成绩)
候选码:(学号、学科)
主码:(学号、学科)
没有主码
主属性:学号、学科
非主属性:成绩
注意:
这个表没有单一的属性可以作为主键,只能添加联合主键:
格式:alter table 表名 add constraint 主键约束的名字 primary key(列名1,列名2)
alter table chengji add constraint lh_pk primary key(学号,学科)