超键

定义:在关系模式中,能唯一标识元组属性集称为超键(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)

  外键是建立在两个关系模式中的,从上述定义中可以知道,某关系模式中主键一定是其候选键,那对于另一关系,只要原关系的主键只表示普通属性,那它就是另一属性的外键,上表中教室号就是学生表中的外键,其主要作用是为了保证数据的一致性完整性

关系图

sql如何创建主键外键约束(查缺补漏SQL中的超键)(1)

作者:不愿透露姓名的覃阿俊链接:https://juejin.cn/post/6914091929349128205来源:掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

,