关系数据库中码、主码、超级码、外码和候选码,主属性和非主属性的定义和区别?

EdwardXZ 2014-04-10 11:14:34
在《数据库系统概论》(第四版)——王珊、萨师煊编著中:
1.候选码的定义:如果关系中的某一属性组的值能唯一地标识一个元祖,则称该属性组为候选码;
主码的定义:如果一个关系有多个候选码,则选定其中一个为主码;
主属性定义:候选码的诸属性称为主属性;
非主属性定义:不包含在任何候选码中的属性称为非主属性;
实体完整性规则:如果属性(一个或者一组属性)A是基本关系R的主属性,则A不能取空值。
根据上面的定义,如果有下表:
工号 | 姓名 | 住址 | 年龄 | 职位

假设工号、姓名和职位都可以唯一标识一个实体,说明都是候选码,那三者也应该都是主属性,三者根据实体完整性规则不可以取空值,余下是非主属性(还是说选定了工号作为主码以后,工号是主属性,其余是非主属性,工号不可以取空值)

2.码的定义是什么?
以下定义出自热心网友:
码是数据系统中的基本概念。所谓码就是能唯一标识实体的属性,他是整个实体集的性质,而不是单个实体的性质。它包括超码,候选码,主码。  超码是一个或多个属性的集合,这些属性可以让我们在一个实体集中唯一地标识一个实体。如果K是一个超码,那么K的任意超集也是超码,也就是说如果K是超码,那么所有包含K的集合也是超码。  候选码是从超码中选出的,自然地候选码也是一个或多个属性的集合。因为超码的范围太广,很多是我们并不感兴趣即无用处的。所以候选码是最小超码,它们的任意真子集都不能成为超码。例如,如果K是超码,那么所有包含K的集合都不能是候选码;如果K,J都不是超码,那么K和J组成的集合(K,J)有可能是候选码。
按照上面码的定义看看外码的定义如下:
设F是基本关系R的一个或者一组属性,但不是关系R的码。K(s)是基本关系S的主码。如果F与K(s)相对对应,则称F是R的外码。
综上:F是非主属性组,必定可以取空值,但是课本例子包括课后题都说F可以是主属性,当为主属性时,为了保持实体完整性,不可以取空值。出现矛盾
[/size][/size][/size]
...全文
28527 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
elvis_test 2014-06-24
  • 打赏
  • 举报
回复
一个表里面多个数据,数据存在推导关系,而主属性是推导关系中处于左边的属性。
software_artisan 2014-04-11
  • 打赏
  • 举报
回复
看得我头都晕了 哪有这么复杂!你只需要记住每条数据都需要一个与业务无关的主键(建议使用GUID),除此外其他字段都是属性。属性字段要不要可为空需要从业务实际出发。例如一个人有名有姓但不一定有字,这样名和姓两个字段可定定义成not null,但把字字段也设成not null的话,估计你的业务就没法办了。
__Hello_Anybody__ 2021-06-28
  • 举报
回复
@software_artisan 这样只能算满足第二范式(2NF),不懂原理无法做到合理拆表,去冗余
EdwardXZ 2014-04-11
  • 打赏
  • 举报
回复
引用 2 楼 xuanbg 的回复:
看得我头都晕了 哪有这么复杂!你只需要记住每条数据都需要一个与业务无关的主键(建议使用GUID),除此外其他字段都是属性。属性字段要不要可为空需要从业务实际出发。例如一个人有名有姓但不一定有字,这样名和姓两个字段可定定义成not null,但把字字段也设成not null的话,估计你的业务就没法办了。
这是我在判断外码是否可以取空值,什么条件下可以取空值时遇到的问题,跟你这说的关系不大。
--小F-- 2014-04-10
  • 打赏
  • 举报
回复
定义什么的最难了。

34,837

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧