超码(superkey)绝对算得上计算机术语中翻译以后看起来更复杂的一个典型。
超码和码其实没有任何关系,它本质上是一组属性的集合。这一组集合可以唯一的标识出一个元组,就是说不同元组的超码中的属性是不全相同的。
比如在上图的关系中,ID这一个属性就足够区分所有的元组,所以ID这个属性就是一个超码。
因为教师可能出现重名的情况,所以name不一定能区分元组,所以name就不是超码。
候选码就是最小超码子集,有点像极小连通子图。当一个超码删除掉任何一个属性之后都不是超码了,我们就把这个超码称为候选码。如{ID}和{name,dept_name}都是候选码。但是{ID,name}就不是候选码,虽然可以唯一区分元组,但是ID这个属性自己就是超码,所以{ID,name}不是候选码。
主码就是数据库设计者选定的、用来主要区分元组的候选码。一般选择那些从不或极少变化的属性,并且把它们列在其他属性的前面。如上表中的ID属性。
三者关系如下: