数据库:候选码、主码、超码、外码、主属性、⾮主属性
⼀:相关定义及举例
定义
在《数据库系统概论》(第五版)——王珊、萨师煊编著中:
1.候选码的定义:如果关系中的某⼀属性组的值能唯⼀地标识⼀个元组,则称该属性组为候选码;
2.主码的定义:如果⼀个关系有多个候选码,则选定其中⼀个为主码;
3.主属性定义:候选码的诸属性称为主属性;
4.⾮主属性定义:不包含在任何候选码中的属性称为⾮主属性;
5.实体完整性规则:如果属性(⼀个或者⼀组属性)A是基本关系R的主属性,则A不能取空值。
例⼦
根据上⾯的定义,如果有下表:
⼯号 | 姓名 | 住址 | 年龄 | 职位
假设⼯号、姓名和职位都可以唯⼀标识⼀个实体,说明都是候选码,那三者也应该都是主属性,三者根据实体完整性规则不可以取空值,余下是⾮主属性(还是说选定了⼯号作为主码以后,⼯号是主属性,其余是⾮主属性,⼯号不可以取空值)
码的定义是什么?
以下定义出⾃热⼼⽹友:
1.码是数据系统中的基本概念。所谓码就是能唯⼀标识实体的属性,他是整个实体集的性质,⽽不是单个实体的性质。它包括超码,候选码,主码。 
2.超码是⼀个或多个属性的集合,这些属性可以让我们在⼀个实体集中唯⼀地标识⼀个实体。如果K是⼀个超码,那么K的任意超集也是超码,也就是说如果K是超码,那么所有包含K的集合也是超码。 
3.候选码是从超码中选出的,⾃然地候选码也是⼀个或多个属性的集合。因为超码的范围太⼴,很多是我们并不感兴趣即⽆⽤处的。所以候选码是最⼩超码,它们的任意真⼦集都不能成为超码。例如,如果K是超码,那么所有包含K的集合都不能是候选码;如果K,J都不是超码,那么K和J组成的集合(K,J)有可能是候选码。
4.按照上⾯码的定义看看外码的定义如下:
设F是基本关系R的⼀个或者⼀组属性,但不是关系R的码。K(s)是基本关系S的主码。如果F与K(s)相对对应,则称F是R的外码。
综上:F是⾮主属性组,必定可以取空值,但是课本例⼦包括课后题都说F可以是主属性,当为主属性时,为了保持实体完整性,不可以取空值。
⼆、举例
(在《数据库系统概论》(第五版)——王珊、萨师煊编著中P179页student表为例)
1.列举任意⼀个例6.1中Student模式上的函数依赖、⽆依赖关系的属性
Sdept依赖于sno,sdept与grade⽆依赖关系。
2.分别列举例6.1中Student模式上存在的⼀个平凡函数依赖和⾮平凡函数依赖
x->y,但x⾥⾯不含有y,则x->y称为⾮平凡依赖函数,例如知道学号不⼀定知道课程成绩(sno->sdept), 平凡依赖反之(sno->sno),平凡依赖是⼀定成⽴的。
3.分别列举例6.1中Student模式上存在的⼀个完全函数依赖和部分函数依赖
P181中间
(sno,cno)->grade 完全依赖
数据库属性的概念(sno,cno)->sdept 部分依赖,因为sno->sdept
4.分别列举例6.1中Student模式上存在的传递依赖。
Sno->sdept,sdept->mname 所以sno->mname(P181)
5.出例
6.1中Student模式上的候选码、主码、超码、外码、主属性、⾮主属性
候选码:如果关系中的某⼀属性组的值能唯⼀地标识⼀个元组,则称该属性组为候选码(sno,cno)⼀起
主码:如果⼀个关系有多个候选码,则选定其中⼀个为主码(sno,cno)⼀起
超码:是⼀个或多个属性的集合,超码中的这些属性可以让我们在⼀个实体集中唯⼀地标识⼀个实体(sno,cno)⼀起外码:cno,sno(相对于普通学⽣表,和课程表)
主属性定义:候选码的诸属性称为主属性;
⾮主属性定义:不包含在任何候选码中的属性称为⾮主属性