几个例子搞清候选码,主码,码,外码

在学习数据库这门课程时,遇到了关于码的一些问题,接下来我将会通过几个例子来解释我对这几个概念的理解

在讲关于码的问题之前,首选要了解在关系中,属性元组的概念

学号

姓名

专业

001

张三

计算机

002

李四

通信

003

王五

计算机

在上面的二维表(关系)中,每一列即为一个属性,每一行即为一个元组

注:上表中假设学生姓名不重复。

先给结论:主码∈候选码∈码。

码: 

码是一个或多个属性的集合,唯一标识元组的属性集。

例如在上表中,由学号或姓名都可以唯一确定一个元组,所以学号可以为码,姓名也可以为码

当同时知道学号和姓名的时候,也可以唯一确定一个元组,所以(学号,姓名)确定同样可以为码。

同理(学号,姓名,专业)也可以为码

候选码:

候选码的概念:若某一关系中,某一属性(组)能唯一的标识一个一个元组,而其子集不能,则称该属性组为候选码。

候选码和码都可以唯一标识一个元组,但不同之处在于,若码为一个属性集,当去掉某一个属性时,仍有可能能够唯一确定一个元组,但候选码的子集不能标识出一个元组

例如上表中(学号,姓名)这个属性集可以唯一标识一个元组,但同时,他的子集(学号)同样可以唯一标识一个元组,所以(学号,姓名)不为候选码。

所以,上表中的候选码属性有(学号)(姓名)。

主码:

在理解候选码之后主码就很好理解了,在候选码中选择一个就可以作为主码了

同样是上面的表格,可以选择(学号)作为主码,也可以选择(姓名)作为主码。

但注意,主码只能是一个属性(集),不能同时选择学号和姓名作为主码。

注意:主码不能为空值!

再举一个例子:

学号

姓名

课程号

成绩

001

张三

1

98

001

张三

2

88

002

李四

1

77

003

李四

2

77

注:上表中假设学生姓名不重复。

在上述表格中,单独的学号不在可以唯一确定一个元组了,所以,(学号)并不是码了,而(学号,课程号)可以为码,(学号,姓名,课程号,成绩)同样也可以为码;

候选码可以为(学号,课程号)或者(姓名,课程号)。

主码一般都选择(学号,课程号)。

注意 这个例子中 因为(学号,课程号)为主码 所以 学号课程号都不能为空。

外码:

先看以下两个关系

学生(学号,姓名,性别,专业号,年龄)

学号

姓名

性别

专业号

年龄

001

张三

1001

19

002

李四

1002

18

003

王五

1001

17

专业(专业号,专业名)

专业号

专业名

1001

计算机

1002

通信

在学生(学号,姓名,性别,专业号,年龄)中,学号为主码,由于专业号并不可以确定具体是哪个元组,所以专业号在学生关系中并不是码,

在专业(专业号,专业名)中,专业号为主码,如果想要在学生表中确定学生的专业名字,需要通过专业号来确定,即学生关系引用了专业关系的主码“专业号”,此时“专业号“便是学生关系的外码。并且称学生关系为参照关系,专业关系为被参照关系。

教材上外码的定义太过拗口,给出我理解的定义:如果一个关系中的一个属性(该属性不能是候选码)是另外一个关系中的主码则这个属性为外码。

同时可以知道关于外码的一个知识点:参照关系的外码和被参照关系的主码的域(取值范围)必须相同。

另外一个例子:

学号

姓名

性别

专业号

年龄

班长

001

张三

1001

19

002

李四

1002

18

001

003

王五

1001

17

001

在这个关系中学号仍然为主码,但是并不能直接知道这个学生的班长是谁,此时,通过班长这个属性,再次查看学生关系,就可以知道这个学生的班长是谁了,这也就引出额外的两个知识点:

外码可以为空,参照关系和被参照关系可以是同一个关系。

额外提一嘴,主码和主键,外码和外键,实际上都是一个意思,只不过叫法不同。

通过这几个例子,希望能对大家对数据库的学习起到一定的帮助,如果有任何疑问,或者笔者若有任何写的不对的地方,欢迎在评论区讨论指正。

  • 33
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值