码有两种:主码和候选码;一般所说的码应是指主码。
候选码:能唯一标识一个元组的属性组。属性组即表示它可以有一个属性,也可以有多个属性。一个表有可能有多个候选码。
主码:从候选码选定一个来唯一标识元组,这个候选码就叫做主码。
主键也就是主码。
主属性:主码(或叫主键)的各个属性叫主属性。例子:一个表有以下这么多列(不好意思,先认为你是男的,若错致歉)
假设这是关于你们学校的表
身份证   全校学号   姓名   性别 系别  班内学号
1234     333         sxrj   男   s     3
分析:
身份证或全校学号都可以唯一确定一个学生;
另外,系别和班内学号两个一起才能唯一确定一个学生;
这样就有此表就有三个候选码,前两个各自只有一个属性,而最后一个有两个属性。如果你选定(系别,班内学号)这个候选码作为主码(或叫主键),
根据主属性的定义——主码的各个属性叫主属性,就可知道系别是主属性,班内学号也是主属性。
这是假设你选定最后一个候选码作为主码的情况,如果你选中身份证作主码的话,那么主属性就只有“身份证”一个了。不明白处就继续问,对这个问题我知道一点的。有错请指正!

解决方案 »

  1.   

    经 luckljtchinaren(Lucky)指点以后,我对一些基本概念已经清楚多了,但我对高等教育出版社萨师煊,王珊主编的数据库系统概论P176-177页的一些文字还不能完全掌握,可以说1、2、3、4NF我都明白,可3与BCNF的区别上还有一点点疑问:
    例子:一个表有以下这么多列(不好意思,先认为你是男的,若错致歉)
    假设这是关于你们学校的表
    身份证   全校学号   姓名   性别 系别  班内学号
    1234     333         sxrj   男   s     3
    分析:
    身份证或全校学号都可以唯一确定一个学生;
    另外,系别和班内学号两个一起才能唯一确定一个学生;
    这样就有此表就有三个候选码,前两个各自只有一个属性,而最后一个有两个属性。如果你选定(系别,班内学号)这个候选码作为主码(或叫主键),
    根据主属性的定义——主码的各个属性叫主属性,就可知道系别是主属性,班内学号也是主属性。
    这是假设你选定最后一个候选码作为主码的情况,如果你选中身份证作主码的话,那么主属性就只有“身份证”一个了。
    在此例中我们假定用系别和班内学号来做主码,那么是不是说(针对P177页第三行:所有的主属性对每一个不包含它的码,也是完全函数依赖这句话)身体证号和全校学号分作为码能够决定(系别和班内学号)(当然这种决定关系是显而易见的)我的意思是说书中的文字有个“所有”这个词的意思是系别和班内学号联合才能叫主属性,还是他们各处分开都可以叫主属性,也就是说对于一个不包含它的码,这个码要求能够是决定二者联合以后的属性才能是BCNF,还是说这个码要求能够是分别决定二者的属性才能是BCNF,当然了本例中这两种条件都满足,也自然是BCNF。
    由于本人对此处比较混乱,所以表达的不一定清晰,其基本意思就是如何确定BCNF,通俗一点最好,书上的文字已经让人搞得头大了。
    当然了一些简单表的BCNF我是能够掌握的,比如我可以认为本例中的表是BCNF,我只是对属于3NF,而不属于BCNF两者的区别不太明白。
    再次谢谢luckljtchinaren(Lucky)
      

  2.   

    关系模式STJ(S,T,J)中,S表示学生、T表示教师、J表示课程。每一教师只教一门课。每门课有若干教师,某一学生选定某门课,就对应一个固定的教师。由语义可得到如下的函数依赖。(S,J)→T;(S,T)→J;T→J
    这里(S,J)、(S,T)都是候选码。 STJ是3NF,因为没有任何非主属性对码传递依赖或部分依赖。但STJ不是BCNF关系,因为T是决定因素,而T不包含码。
      

  3.   

    谢谢各位大侠的无私帮助,我已经基本理解BCNF了,为了让更多人参与讨论,让更多人能够掌握这个概念,我先将帖子顶一下,8月初结贴。
    希望有不同见解的朋友参与讨论,
    再次谢谢几位大侠了。
    特别感谢LDH202(玲海)和 luckljtchinaren(Lucky)两位的耐心与细致,让我对这个问题的理解更加透彻,对参与讨论的各位朋友我也表示衷心的感谢。