关于主码(主键)、候选码、外码(外键)的理解,请达人指教

deercarter 2010-05-24 12:07:26
定义我能理解,但是应用到做题上出现了问题
我先把题目叙述一下:
建立图书管理系统,需求如下:
可查询藏书的书名,书号,图书数量,图书位置;
可查询读者所借书的书名,书号,应还书日期,借书的数量;
可查询图书借还情况,包括读者姓名,读者证号,借书日期,还书日期,读者电话,读者家庭地址;
如某种书籍借阅人较多,可查询该书出版社名,出版社电话,出版社信箱,出版社地址,以便联系,增加购买;
问题:
1、给出下列表的字段
我的答案
图书表(书号,书名,藏书总数,借出数量,在馆数量,借出书的应还日期,出版社名称,图书位置)
读者表(读者证号,读者姓名,读者所借书名,读者所借书号,借书日期,还书日期,应还书日期,读者电话,读者家庭地址)
出版社表(出版号,出版社名称,出版社电话,出版社邮箱,出版社通讯地址)
借阅表(书号,书名,借出日期,应还书日期,借出书数量)
2、说明下表的主键和外键(问题就在这里了
图书表(?)
借阅表(?)
根据对第一题的做法,我觉得图书表的主键可以用书号;但是根据外键的定义(用于建立和加强两个表数据之间的链接的一列或多列)书号又可以做外键,但是主码是不能做外键的,在这一点上,我糊涂了,谁能帮忙解惑,万分感激!

PS:会不会是我第一题做的不对导致第二题无法进行下去?
...全文
7392 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
feilniu 2010-05-25
  • 打赏
  • 举报
回复
示例方案,供参考:

出版社表(#出版社名,出版社电话,信箱,地址) --假定出版社名是唯一的。

图书表(#书号,书名,ISBN,[出版社名],出版年份,图书数量,图书位置)
外键:出版社名 引用 出版社表(出版社名)

读者表(#读者证号,读者姓名,电话,家庭地址)

借阅表(#借阅流水号,[读者证号],[书号],借出数量,供出日期,归还日期)
外键:读者证号 引用 读者表(读者证号)
外键:书号 引用 图书表(书号)


建议LZ再好好看看ER建模的内容,并把主键和外键的含义理解清楚。
deercarter 2010-05-25
  • 打赏
  • 举报
回复
还有达人给出解释么……
htl258_Tony 2010-05-24
  • 打赏
  • 举报
回复
问题有点模糊,参考:

(1) 候选码(Candidate key)
在关系模式R(U)中,K为R的一个属性或者一组属性,若满足K→U,则K为关系模式R的候选码(Candidate key)。
候选码是一组非空的属性名集合,每个属性必须为该关系模式的属性。
在关系模式R(U)中,包含在任何一个候选码中的属性称为主属性(prime Attribute)。不包含在任何候选码中的属性称为非主属性(Nonprime Attribute)或非码属性。
最简的情况下,单个属性是候选码。最极端的情况,所有的属性的组合构成码。如果整个属性组U是码,则称为全码。例如,在关系模式供应商(供应商名称,供应商地址,供应商电话)中,供应商名称是唯一的候选码。而在关系模式供应(供应商名称,供货名称,供应单价)中,属性的组合(供应商名称,供货名称)是唯一的候选码。
关系模式的每个候选码具有下列两个特性:
· 唯一性:在关系模式R(U)中, 设K为关系模式R的候选码,则对于关系模式R的任何一个关系实例r中,任何时候都不存在候选码属性值相同的两个元组。即候选码的值唯一的决定元组的所有属性值,即r中的任意2个元组s和t,都有s[k]不等于t[k]
· 最小特性:在不破坏唯一性的情况下,没有任何属性可以从候选码属性集中删除。即候选码是由其值唯一决定元组值的最小属性集组成。
例如:在供应关系中,必须由供应商名称和供货名称两者组合才能唯一的决定供应关系中的一个元组值,缺一不可。
下面给出一个具有多个候选码的例子。有关系模式CSZ(CITY,ST,ZIP),其中有三个属性:城市为CITY,街道ST,邮政编码ZIP。其属性集合和属性间的函数函数依赖关系为:
U = { CITY,ST,ZIP }
F = {(CITY,ST)→ZIP,ZIP→CITY}
即城市和街道共同决定邮政编码,邮政编码决定城市。在这个关系模式中,有两个候选码,即(CITY,ST)和(ST,ZIP)。CITY,ST和ZIP都是主属性。
再给出一个全码的例子,如表5-2。我们有一个大部件的设计A,其中包含四个设计相同的左右并排放置的子部件,四个子部件的编号由左到右分别为I1,I2,I3和I4。设计一个关系模式描述四个子部件之间的左右邻接关系,关系模式左右邻接(左邻接部件,右邻接部件)。这个关系模式的唯一的候选码就是(左邻接部件,右邻接部件),即全码。

表 5-2

左邻接部件 左邻接部件
I1 I2
I2 I3
I3 I4


在左右邻接关系中,必须由左邻接部件和右邻接部件共同决定其中的一个元组。
(2)主码(Primary Key)
在一个关系模式中,可以有多个候选码,但只能有一个主码。
若关系模式R(U)中有多个候选码,则选定其中的一个候选码作为主码,或称主关键字。
例如,在关系模式供应商(供应商名称,供应商地址,供应商电话)中,供应商名称是唯一的候选码,也是它的主码。而在关系模式供应(供应商名称,供货名称,供应单价)中,属性的组合(供应商名称,供货名称)是唯一的候选码,也是它的主码。在这个关系模式CSZ中,有两个候选码,即(CITY,ST)和(ST,ZIP),可以任选其中一个作为主码。在左右邻接关系中,关系模式的唯一的候选码(左邻接部件,右邻接部件)也是它的主码。

(3)外码
关系模式R中属性或属性组X并非R的候选码,但X是另一个关系模式的候选码,则称X是R的外部码(Foreign Key),也称外码。
例如:在供应关系模式中,供应商名称不是供应关系模式的码,但供应商名称是关系模式供应商的码,则称供应商名称是关系模式供应的外部码或外码。
主码和外部码提供了一种表示不同关系之间相互关联的手段。如关系模式供应商和供应之间的关系就是通过供应商名称来体现的。

来源网络
永生天地 2010-05-24
  • 打赏
  • 举报
回复
书号在图书表里做主键,那他就是借阅表的外键的引用,也就是借阅表的书号是个外键,数据引用于图书表。

所以借阅表还需要自己的主键,还有另外的读者的外键
feilniu 2010-05-24
  • 打赏
  • 举报
回复
借阅表的每条记录表示读者与书的借阅关系,多对多。所以可以用(读者证号, 书号)做复合主键,或者用单独的主键。
From15 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xys_777 的回复:]
书号在图书表里做主键,那他就是借阅表的外键的引用,也就是借阅表的书号是个外键,数据引用于图书表。

所以借阅表还需要自己的主键,还有另外的读者的外键
[/Quote]
多说两句呗。。。
deercarter 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 libinlink 的回复:]

图书表(书号,书名,藏书总数,借出数量,在馆数量,借出书的应还日期,出版社号,图书位置)
读者表(读者证号,读者姓名,读者电话,读者家庭地址)
出版社表(出版号,出版社名称,出版社电话,出版社邮箱,出版社通讯地址)
借阅表(书号,读者证号,借出日期,应还书日期,借出书数量)
2、说明下表的主键和外键(问题就在这里了)
红色=主键
蓝色=外键
借阅表关联 图书表 、 读者表(关系为m……
[/Quote]
请问借阅表中,读者证号是否可以做主键?书号是否可以做外键?
ShenLiang2025 2010-05-24
  • 打赏
  • 举报
回复



Ⅰ分析相关
1 找到3个实体.图书,读者,出版社.
2 考察实体间的关系,
3 图书和出版社 一对一的关系,这里不需要多加联系,也即是不需要额外的关系表.
4 读者和图书是 多对多的关系,这里需要多加一个关系表,借阅关系.

Ⅱ结论相关
图书表除了存放基本信息还要存放出版社表的信息,也即是外键关联到出版社编号.
借阅表存放读者和图书的信息和借阅书的其它信息,这里会关联到图书编号和读者编号

Ⅲ ... ...

alisafan123 2010-05-24
  • 打赏
  • 举报
回复
libinlink 2010-05-24
  • 打赏
  • 举报
回复
好好看看 数据库原理 ER关系一章
libinlink 2010-05-24
  • 打赏
  • 举报
回复
图书表(书号,书名,藏书总数,借出数量,在馆数量,借出书的应还日期,出版社号,图书位置)
读者表(读者证号,读者姓名,读者电话,读者家庭地址)
出版社表(出版号,出版社名称,出版社电话,出版社邮箱,出版社通讯地址)
借阅表(书号读者证号,借出日期,应还书日期,借出书数量)
2、说明下表的主键和外键(问题就在这里了)
红色=主键
蓝色=外键
借阅表关联 图书表 、 读者表(关系为m:n)
图书表和出版社表的关系为(n:1)

34,837

社区成员

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

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