学号 | 姓名 | 年龄 |
---|---|---|
001 | 张三 | 14 |
002 | 赵四 | 15 |
003 | 王五 | 16 |
004 | 王五 | 16 |
码
码是可以确定一个元组的所有信息的属性名或属性名组。
码的作用:用于区分不同元组(也就是不同行),此表中则为区分不同学生。
ps:元组理解为一张表的某一行,属性理解为一张表的某一列,属性名就是列的名字(字段)。
例如在 { a, b, c, d } 中,
假设知道 a 的值就能确定 a, b, c, d 的值,
假设知道 c, d 的值就可以确定 a, b, c, d 的值,
那么 { a } 就是码,{ c, d } 就是码。
并且 { a, b }, { a, c }, { a, b, c }, { a, b, c, d } 等也都是码,因为它们也可以确定一个元组的所有值,即使很多余。
超码
超码 是一个或多个属性的集合,这些属性的组合可以使我们在一个关系中唯一地标识一个元组;
在上表中,{学号} 可唯一标识学生,所以学号是超码;
有重名所以 {姓名} 不能作为唯一标识,但是 {学号,姓名} 组合可以为超码。
同样,此表中 {年龄} 不可作为唯一标识,但是 {姓名,年龄} 也可以作为超码。
所以综述,本表中超码为:{学号},{学号,姓名},{学号,年龄},{学号,姓名,年龄},{姓名,年龄}
候选码
候选码 与 超码 之间的关系好比正方形与长方形;候选码属于超码的一种特殊情况,而特殊则是特殊在最小的超码才能称为候选码。
候选码的真子集中不存在码,候选码可以有多个。
所以这么来看,上面的候选码中,只有 {学号},{姓名,年龄} 可以作为候选码。
而形如:{学号,姓名} 则是因为学号可以单独作为唯一标识,所以 {学号,姓名} 组合可以化简,不是最小的超码,固不能作为候选码。
主码
主码 性质上与 候选码 类似,但是主码只有一个,而谁是主码则是由数据库设计者选中的,是用来在一个关系中区分不同元组的候选码。
主码就是主键的意思,主码是任意一个候选码。
主码的选择非常重要,此表中主码会选 {学号} 作为主码的原因在于:
首先第一点,只有一个属性,最简;
其次第二点,虽然此时 {姓名,年龄} 也可以作为主码,但是若表中新增一名同学,不同学号相同姓名相同年龄,则会导致 {姓名,年龄} 不能成为主码、候选码以及超码。
小结:
1、所有码都是一个集合,包括超码,候选码,主码。
2、所有可以用来在实体集中标识唯一实体的集合,都是超码。
3、如果任意超码的真子集不包括超码,则称其为候选码。
4、被数据库设计者选中的,用来在同一实体集中区分不同实体的候选码。
5、超码包括候选码,候选码包括主码。
网友评论