ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

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

2020-03-13 17:44:46  阅读:394  来源: 互联网

标签:候选 外码 非主 定义 sno 超码 依赖 属性


一:相关定义及举例
定义
在《数据库系统概论》(第五版)——王珊、萨师煊编著中:
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

标签:候选,外码,非主,定义,sno,超码,依赖,属性
来源: https://blog.csdn.net/qq_43346054/article/details/104845407

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有