码的作用
用于区分不同元组、也就是不同行,此表中则为区分不同学生。
超码
超码 是一个或多个属性的集合,这些属性的组合可以使我们在一个关系中唯一地标识一个元组;
e.g. 在上表中,{学号} 可唯一标识学生,所以学号是超码;有重名所以 {姓名} 不能作为唯一标识,但是 {学号,姓名} 组合可以为超码,同样,此表中 {年龄} 不可作为唯一标识,但是 {姓名,年龄} 也可以作为超码,但是这样非常不推荐。
所以综述,本表中超码为:{学号},{学号,姓名},{学号,年龄},{学号,姓名,年龄},{姓名,年龄}
候选码
候选码 与超码之间的关系好比正方形与长方形;候选码属于超码的一种特殊情况,而特殊则是特殊在最小的超码才能称为候选码。
e.g. 所以这么来看,上面的候选码中,只有 {学号},{姓名,年龄} 可以作为候选码。而形如:{学号,姓名} 则是因为学号可以单独作为唯一标识,所以 {学号,姓名} 组合可以化简,不是最小的超码,固不能作为候选码。
主码
主码 性质上与 候选码 类似,但是主码只有一个,而谁是主码则是由数据库设计者选中的,是用来在一个关系中区分不同元组的候选码。
e.g. 主码的选择非常重要,此表中主码会选 {学号} 作为主码的原因在于:
首先第一点,只有一个属性,最简;
其次第二点,虽然此时 {姓名,年龄} 也可以作为主码,但是若表中新增一名同学,不同学号相同姓名相同年龄,则会导致 {姓名,年龄} 不能成为主码、候选码以及超码。
外码 与 参照
左表中,主码为 {学号} ,右表中,主码为 {年龄} ;
而在左表中,也存在属性名称为:年龄;
所以在左表中,年龄 为左表的外码;且 参照 右表,因为属性 年龄 在右表中为主码。