zoukankan      html  css  js  c++  java
  • 主键、外键、超键、候选键的区别【Written By KillerLegend】

    先说一下属性的定义:

    表的每一行对应一个元组,表的每一列对应一个域。由于域可以相同,为了加以区分,必须对每列起一个唯一的名字,称为属性(Attribute)。

    再来看看几个键的定义:

    超键:在关系模式中,能唯一标识元组的属性集称为超键。
    候选键 :如果一个属性集能唯一标识元组,且有不包含多余属性,那么这个属性集称为候选键(候选键是没有多余属性的超键)
    主键:关系模式中用户正在使用的候选键称主键(primary key)。一般,如不加说明,键是指主键。
    外键:在关系模式R中,如果某属性集是其他模式的候选键,那么该属性集对模式R来说就是外键

    主要说一下前三个键的区别:

    网上有一个很经典的习题用于说明这三个键的区别:

    学号                姓名         性别           年龄         系别           专业
    20020612       李辉          男             20            计算机       软件开发
    20060613       张明          男             18             计算机      软件开发
    20060614       王小玉       女             19             物理         力学
    20060615       李淑华       女             17             生物         动物学
    20060616       赵静          男             21             化学         食品化学
    20060617       赵静          女             20             生物         植物学

    a){学号}
    b){学号、姓名}
    c){年龄、系别}
    d){姓名、性别}
    e){姓名、专业}

    原文有解答,但或许有的人似乎看的不太懂。这里说一下我的理解:

    这里的【学号 】              【 姓名】         【性别 】         【 年龄】        【 系别】          【 专业】所对应的每一个列称为一个域,其本身为列的属性,再啰嗦一点的说,比如下面这一列,

    学号      
    20020612  
    20060613  
    20060614  
    20060615  
    20060616  
    20060617  

    其属性就为【学号】。属性集就是属性的集合,比如:{年龄、系别}

    再比如下面这一行:

    20020612       李辉          男             20            计算机       软件开发
    就称为一条记录或者说是一个元组。

    a选项{学号}可以唯一的标识一个元组,比如说我们用20060616就可以知道是性别为男,名字为赵静的人。由于没有多余的属性,所以{学号}既可以称为一个超键,也可以称为一个候选键。

    b选项{学号、姓名}也可以唯一的标识一个元组,但是这个集合里的姓名属性是不必要的,也就是多余的,即如果没有【姓名】属性,那么这个集合

    {学号、姓名}也可以唯一确定一个元组。由于有多余的属性,所以{学号、姓名}可以称为超键,但是不能称为候选键。

    c,d,e选项均可以唯一的标识一个元组,并且其中每一个属性均是必须的,去掉任意一个属性,那么其所在的集合便不能唯一的标识一个元组,所以c,d,e 均可以称为超键,也可以称为候选键。

    所以这道题中,应该选b。

    主键就是在候选键中任意选一个键。

    总结:

    候选键可以称之为超键,但超键不一定可以称为候选键。候选键的属性一定不多余,但超键的属性不一定均有用。用集合的关系来说就是候选键隶属于超键,而主键为候选键中的一个元素。


    作者:KillerLegend
    出处:http://www.cnblogs.com/KillerLegend/
    分享最新的资源,分享个人所得,欢迎关注我的新浪微博
    新浪微博主页:ikey4u
    我的个人博客:www.ikey4u.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

     
  • 相关阅读:
    msysgit 上传文件夹,规范化的日常
    第三次作业【补完作业】
    c++我在努力----第三次作业体会
    编程题
    视频课程作业随笔
    HDU 4123 Bob’s Race 树形dp+单调队列
    HDU 4514 湫湫系列故事——设计风景线 树的直径
    POJ 1239 Increasing Sequences 动态规划
    BNUOJ 52318 Be Friends prim+Trie
    HDU 5925 Coconuts 离散化
  • 原文地址:https://www.cnblogs.com/killerlegend/p/3351730.html
Copyright © 2011-2022 走看看