数据库:候选码、主码、超码、外码、主属性、非主属性

一:相关定义及举例
定义
在《数据库系统概论》(第五版)——王珊、萨师煊编著中:
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(相对于普通学生表,和课程表)
主属性定义:候选码的诸属性称为主属性;
非主属性定义:不包含在任何候选码中的属性称为非主属性
————————————————
版权声明:本文为CSDN博主「Atlas!」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/must_5/article/details/90348037

上一篇:MySQL57--SQL语句练习03


下一篇:SELECT单表查询