摘自http://blog.csdn.net/wnnscns/article/details/48622923,感谢原创作者!
码是能唯一标识实体的属性,他是整个实体集的性质,它包括超码,候选码,主码。
1、超码
超码是一个或多个属性的集合,这些属性可以让我们在一个实体集中唯一地标识一个实体。如果K是一个超码,那么K的任意超集也是超码,也就是说如果K是超码,那么所有包含K的集合也是超码。
例如:学生是一个实体,则学生的集合是一个实体集,而超码是用来在学生的集合中区分不同的学生。假设学生(实体)具有多个属性:学号,身份证号,姓名,性别。因为通过学号可以找到唯一一个学生,所以{学号}是一个超码,同理{学号,身份证号}、{学号,身份证号,姓名}、{学号,身份证号,姓名,性别}、{身份证号}、{身份证号,姓名}、{身份证号,姓名、性别}也是超码.
虽然超码可以唯一标识一个实体,但是可能大多数超码中含有多余的属性。所以我们需要候选码。
2、候选码
候选码:如果任意超码的真子集不能包括超码,则称其为候选码,候选码是最小超码;如果K,J都不是超码,那么K和J组成的集合(K,J)有可能是候选码。
在上例中,只有{学号}、{身份证号}都是候选码;另外,如果性别和姓名可以唯一标识一个学生,则{姓名,性别}也为超码。
3、主码
主码:被数据库设计者选中的,用来在同一实体集中区分不同实体的候选码;此外,应该选择哪些从不或极少变化的属性;
总结:
1、所有码都是一个集合,包括超码,候选码,主码。
2、所有可以用来在实体集中标识唯一实体的集合,都是超码。
3、如果任意超码的真子集不包括超码,则称其为候选码。
4、被数据库设计者选中的,用来在同一实体集中区分不同实体的候选码。
5、超码包括候选码,候选码包括主码。