在现在的关系型数据库中,存在着常用的几种键,举一个最常见的键: 主键,大家肯定都知道主键吧,
现在我们要介绍关系型数据库中的4中键:超键、候选键、主键、外键
1)超键:
一个列或者列集,唯一标识表中的一条记录。超键可能包含用于唯一标识记录所不必要的额外的列,我们通常只对仅包含能够唯一标识记录的最小数量的列感兴趣。
其实乍一看很难懂,其实是说法不太容易懂
我们来弄一张表来说明一下
student_id | name | grade | class | age |
00001 | A | 1 | 2 | 18 |
00002 | C | 1 | 1 | 17 |
00003 | F | 1 | 3 | 16 |
00004 | G | 1 | 4 | 18 |
00005 | H | 2 | 2 | 16 |
00006 | Q | 2 | 1 | 17 |
00007 | S | 2 | 2 | 16 |
00008 | Z | 2 | 2 | 19 |
一张student表 假设姓名没有重复的 学号(student_id) ,姓名都可以确定唯一一条记录,
学号+姓名的组合也可以确定一条记录,这三种都叫超键
2)候选键
仅包含唯一标识记录所必需的最小数量列的超键。表的候选键有三个属性:
唯一性:在每条记录中,候选键的值唯一标识该记录。
最小性:具有唯一性属性的超键的最小子集。
非空性:候选键的值不允许为空。
在我们的例子中,分公司编号是候选键,如果每个分公司的邮编都不同,那么邮编也可以作为分公司表的候选键。一个表中允许有多个候选键。
上面的超键中有3个,有2个值包含一个字段,有一个含有2个字段,超键中最少的组合(至少为1,且去掉任何一个字段都不再是超键)为候选键,上图的例子中2个只含一个字段的超键为候选键,那个带2个字段的超键由于去掉其中一字段依然是超键,所以其不是候选键。
3)主键和外键
主键和外键就不过多介绍了,直接放定义
主键:
主键的选择在关系数据模型中非常重要,很多性能问题都是由于主键选择不当引起的。在选择主键时,我们可以参考以下原则:
1.主键要尽可能地小。
2.主键值不应该被改变。主键会被其他表所引用。如果改变了主键的值,所有引用该主键的值都需要修改,否则引用就是无效的。
3.主键通常使用数字类型。数字类型的主键要比其他数据类型效率更高。
4.主键应该是没有业务含义的,它不应包含实际的业务信息。无意义的数字列不需要修改,因此是主键的理想选择。大部分关系型数据库支持的自增属性或序列对象
更适合当作主键。
虽然主键允许由多列组成,但应该使用尽可能少的列,最好是单列。
外键:
一个表中的一个列或多个列的集合,这些列匹配某些其他(也可以是同一个)表中的候选键。注意外键所引用的不一定是主键,但一定是候选键。当一列出现在两张
表中的时候,它通常代表两张表记录之间的关系。