数据库表 关系模式 外键、超键、候选键和主键 约束的区别 (图文详解)
超键
定义:在关系模式中,能唯一标识元组的属性集称为超键(Super Key)。
分析:t_student(id, name, age, sex)
超键定义的核心在于能唯一标识元祖,并且还是属性集;一般情况我们要寻找一个学生,不管是姓名还是性别都不能准确找到,数据中都还可以存在同名同岁的学生,所有在上面的关系模式中只有通过学号才能找到某个特定的学生。
因此上述关系模式中只有包含学号的属性集才能称之为超键:
例:(id), (id, name), (id, name, age)等等
候选键
定义:在关系模式中,能唯一标识元组并且不含多余属性的属性集称为候选键(Candidate Key)。
分析:t_student(id, name, age, sex)
与超键定义的不同于能不含多余的属性;对上述例子,假设数据中没有任何一个学生的姓名是重复的,那么我们可以通过学号,也可以通过姓名唯一确定某个特定的学生,那么所有包含学号,姓名的属性集我们都可以称为超键,但不含多余属性的属性集,表示如果再删除属性就不再能称为键了,候选键即为特殊的超键。
因此上述关系模式中只有单独的学号,姓名属性集才能称为候选键:
例:(id), (name)
主键
定义:在关系模式中的若干个候选键中,随意指定一个作为关键字,此关键字即为主键(Primary Key)。
分析:t_student(id, name, age, sex)
主键很好理解,就在在候选键的基础上任意选择一个作为主键,同时衍生出复合主键和联合主键 ,假设我们没有学号字段,如果可以通过姓名,年龄,性别一同找到某个特定的学生,那么就称(name, age, sex)为复合主键,全部由主键构成的称为联合主键。
因此上述关系模式中,姓名也能唯一确定学生,那么主键有:
例:(id), (name)
外键
定义:关系模式R1的某个属性不是R1的候选键,而是关系模式R2中的候选键,那么这个属性集对于R1来说就是外键(Foreign Key)。
分析:t_student(id, name, age, sex, class_id), t_classroom(id, class_name)
外键是建立在两个关系模式中的,从上述定义中可以知道,某关系模式中主键一定是其候选键,那对于另一关系,只要原关系的主键只表示普通属性,那它就是另一属性的外键,上表中教室号就是学生表中的外键,其主要作用是为了保证数据的一致性和完整性。