一组属性(或列)(A1, A2, …, An) 可以成为某个实体E的 super key, 如果通过这些属性可以确定一个实体。
如果同样的姓名和出生时间可以标识一个人,那么(FirstName, LastName, BirthTime)就是Person的一个超键。
当然,(FirstName, LastName, BirthTime)加上Gender,即 (FirstName, LastName, BirthTime, Gender)也是一个super key。
但(FirstName, LastName)不是super key,因为有同名同姓的人。如果没有同名同姓的人,那(FirstName, LastName)也是super key。
从super key 中去掉一些属性,剩下的属性有可能是super key,也有可能不是。
如果从一个super key中的属性中,去掉任何一个属性,都不能唯一确定一个实体,那么这个super key就是candidate key。
要描述一个人,我们不需要把所有关于这个人的信息都说出来,那样没有必要。我们也不能只说这个人姓什么,因为这样还不够,听的人不知道是谁。
所以,我们要做的是,用最少的事实描述一个人。这就是 candidate key存在的意义。
描述一个东西可以用不同的属性组合.。一个人可以用姓名+出生时间指定,也可以用身份证号码(假设每个人都有身份证号)。因此,一个实体的candidate key也可能有多个。 那我们用哪个来描述一个实体呢?
都可以,所以叫 candidate (候选的) key。当然,候选也意味着有些被选上,有些被淘汰。在数据库中,有一种方法描述实体就够了,因此,要从候选键中选一个作为主键(Primary Key)。
有了主键,就可以用它描述实体。
每个表都应该有一个主键,用来唯一确定一行数据。
数据库中,不同的东西保存在不同的表中,有些表之间是互相关联的。假设有个表用来保存公司的员工,一个员工同时也是一个人,这个人的基本信息保存在另一个表Person中,这就需要引用别的实体。
前面说过,主键就是起这个作用的,可以用来标识一个实体。当一个表的主键被一个表引用,它在那个表中就成为外键(foreign key)。