超码、候选码、主码、主属性、非主属性

超码

定义:一个或多个属性的集合,这些属性的组合可以使我们在一个实体集中唯一的标识一个实体。

例如:学生是一个实体,则学生的集合是一个实体集,而超码是用来在学生的集合中区分不同的学生。假设学生(实体)具有多个属性:学号,身份证号,姓名,性别。因为通过学号可以找到唯一一个学生,所以{学号}是一个超码,同理{学号,身份证号}、{学号,身份证号,姓名}、{学号,身份证号,姓名,性别}、{身份证号}、{身份证号,姓名}、{身份证号,姓名、性别}也是超码.在这里,因为不同的学生可能拥有相同的姓名,所以姓名不可以区别一个学生,既{姓名}不是一个超码,{性别}、{姓名、性别}也不是。    虽然超码可以唯一标识一个实体,但是可能大多数超码中含有多余的属性。所以我们需要候选码。

候选码

定义:如果超码的任一真子集不能包括超码,则称其为候选码;超码包括候选码;

在上例中,只有{学号}、{身份证号}都是候选码;另外,如果性别和姓名可以唯一标识一个学生,则{姓名,性别}也为超码。

主码

定义:被数据库设计者选中的,用来在同一实体集中区分不同实体的候选码;此外,应该选择哪些从不或极少变化的属性;

注:

    一个实体集中只能有一个主码,但可以有多个候选码 主码的选择必须慎重。 例如:人的姓名是不可以做主码的,因为可能有多个人重名,而身份证可以做主码。 主码的选择应该是那些从不或极少变化的属性。 例如:一个人的地址就不应该作为主码的一部分,因为它很可能变化

主属性

定义:包含在任一候选码中的属性称主属性。

非主属性

定义:不包含在任一候选码中的属性称为非主属性。

非主属和主属性互为补集。

例如:

表 1 表1 表1

对于表1,(学号、课名)这个属性组就是候选码。该表中有且仅有这一个码。(假设所有课没有重名的情况) 主属性就有两个:学号 与 课名 非主属性:除了学号与课名,其他属性都是非主属性

经验分享 程序员 微信小程序 职场和发展