美文网首页数据库
数据库笔记(补充)——候选码的确定方法

数据库笔记(补充)——候选码的确定方法

作者: SunnyQjm | 来源:发表于2017-11-10 16:05 被阅读43次

写在前面:前面一堆都了解了解,重点在后面一个关于求候选码的算法(要是题里面没有给主属性,就要通过这个方法求哪些是主属性,哪些不是了,所以还是挺实用的

候选码定义: 设K为关系模式R<U, F>的属性(组),若K→FU,则称K为R的 候选码

  • 主码:若R<U , F>有多个候选码,则可以从中选定一个作为R的主码。
  • 主属性:包含在任一个候选码中的属性,称作主属性。
  • 非主属性:不包含在任一个候选码中的属性,称作非主属性(或非码属性)。
  • 全码:关系模式的码由全部属性构成。

注: 码或者是某一函数依赖的左部, 或是一个属性组

引例:求出关系模式R<U, F>的所有候选码:
U={ A , B , C , D , E }
F={AB→C, B→D, C→E, EC→B, AC→B }

解: 验证AB是否码, 须证明 AB→FABCDE是否成立?
∵AB→C(已知), 而AB→AB(自反), ∴AB → ABC(合并)
∵B→D(已知), ∴AB→AD(增广), ∴AB → ABCD(合并)
∵C→E(已知), AB→C(已知), ∴AB → E(传递)
于是 AB → ABCDE(合并)

同理可证:AC也是一个候选码

上述例题实际上就是利用Amstrong公式,最后得到一个属性集可以推出U(关系模式的全集)

练习: 根据码的定义,求关系模式R<U, F>的所有候选码。
U={ A , B , C , D }, F={A→ B, C→B }

答:ACD

关于2NF的结论

  1. 不存在非主属性的关系模式属于2NF。 (没有非主属性)
  2. 全码关系模式属于2NF。 (没有非主属性)
  3. 码只由一个属性组成的关系模式属于2NF。(不会有部分依赖)
  4. 二目关系模式属于2NF。 (码或是一个属性,或是全码)
  5. 若R属于1NF,但R不一定属于2NF。
    例如, 关系模式 S(S#, SN, SD, DEAN, C#, G)

关于3NF的结论

  1. 不存在非主属性的关系模式属于3NF。 (没有非主属性)
  2. 全码关系模式属于3NF。 (没有非主属性)
  3. 二目关系模式属于3NF。 (不会存在传递依赖)
  4. 若R属于3NF,那么R也属于2NF。
    (可证明,反证)
  5. 若R属于2NF,但R不一定属于3NF。
    例如,关系模式 S_SD(S#, SN, SD, DEAN)

BCNF定义:关系模式R<U, F> ∈1NF,对于属性组X和Y,若X→Y且Y ∉ X时X必含有码,则R<U, F > ∈BCNF

  • 由BCNF的定义,对于非平凡的函数依赖: X → Y
    • X包含码,或者X本身就是码(换句话说,X是一个超码)
  • 所有非主属性对每一个码都是完全函数依赖,
    即, 若R∈BCNF, 则R∈2NF。
  • 所有的主属性对每一个不包含它的码也是完全函数依赖。
  • 没有任何属性完全函数依赖于非码的任何一组属性。
  • 若R∈BCNF, 则必有R∈3NF; 反之不一定成立

铛铛铛!!!敲黑板,候选码的求解算法

以下算法会涉及到求属性集的闭包,函数依赖集和属性集闭包传送阵

设关系模式R<U, F>

  1. 将R的所有属性分为 L、 R、N和 LR四类,并令X代表L、N两类Y代表LR类
    • L类: 出现在F的函数依赖部的属性;
    • R类: 出现在F的函数依赖部的属性;
    • N类: 在F的函数依赖左右两边都不出现的属性;
    • LR类:在F的函数依赖左右两边都出现的属性 。
  2. 求属性集闭包X+,若 X+包含了R的全部属性则X即为R的唯一候选码, 转5;
  3. 否则, 在Y中取一属性A,求属性集闭包(XA)+,若(XA)+包含了R的全部属性,则转4;否则,调换一属性反复进行这一过程,直到试完所有Y中的属性。
  4. 如果已找出了所有的候选码,则转(5);否则在Y中依次取2个、3个、…属性,求X与它们的属性集闭包,直到其闭包包含R的全部属性。
  5. 停止,输出结果。
  • 例1: 设关系模式R(A, B, C, D), 其函数依赖集:
    F={D→B, B→D, AD→B, AC→D},求R的所有候选码。
    解: L类: A, C
    R类:
    N类:
    LR类: B, D
    因为(AC)F+=ACDB,所以AC是R的唯一候选码
  • 例2:设关系模式R(A, B, C, D, E, P), 其函数依赖集:
    F={A→D, E→D, D→B, BC→D, DC→A},求R的所有候选码。
    解: L类: C, E
    R类:
    N类: P
    LR类: A, B, D
    因为(CEP)F+=CEPDBA,所以CEP是R的唯一候选码。
  • 例3: 设关系模式R(S, D, I, B, O, Q), 其函数依赖集:
    F = { S→D, I→B, B→O, O→Q, Q→I },求R的所有候选码。
    解: L类(S); R类(D) ; N类(无) ; LR类(I, B, O, Q)
    因为S+=SD, 所以S不是R的候选码;
    因为(SI)+=SIDBOQ,所以SI是一个候选码;
    因为(SB)+=SBDOQI,所以SB也是一个候选码;
    因为(SO)+=SODQIB,所以SO也是一个候选码;
    因为(SQ)+=SQDIBO,所以SQ也是一个候选码。

相关文章

  • 数据库笔记(补充)——候选码的确定方法

    写在前面:前面一堆都了解了解,重点在后面一个关于求候选码的算法(要是题里面没有给主属性,就要通过这个方法求哪些是主...

  • 范式问题

    在了解范式问题之前,需要明确的概念 (1)键和码在数据库中真是傻傻分不清楚 候选码:不含多余属性的超码,即对于候选...

  • 数据库设计范式之逻辑设计

    逻辑设计 1. 相关名词 1.1. 候选码,主码 候选码通常有一个或多个,用于唯一确定一个元组(行,对象)。举例:...

  • 候选码

    定义:某一属性或属性组的值能唯一的标识一个元组,而其任何、子集都不能再标识。即可以唯一标识一个元组的最少的属性集合...

  • 关系数据库(二)

    关系数据库 一.关系数据库及形式化定义 关系域笛卡尔积关系:笛卡尔积的子集候选码、主码全码关系的三种类型:基本关系...

  • js学习笔记

    js学习笔记 语法 后续补充笔记 join()方法var fruits = ["Banana", "Orange"...

  • 候选码,超码

    例:学生是一个实体,则学生的集合是一个实体集,而超码是用来在学生的集合中区分不同的学生。假设学生(实体)具有多个属...

  • 数据库基础

    概述 与文件系统本质区别——“实现整体数据的结构化” 候选码:该属性组的值可唯一确定一个元组,但其子集不行 主码:...

  • 关系规范化理论

    候选码:不含有多余属性的超键成为候选键。也就是在候选键中在删除属性就不是键了。主码:用户选作元组标识的候选键成为主...

  • 数据库理论小问题

    如图 候选码是最小的超码 假设K是候选码,即K-f>U(U完全依赖K),又K是最小的超码,即K-p>U(U部分依赖...

网友评论

    本文标题:数据库笔记(补充)——候选码的确定方法

    本文链接:https://www.haomeiwen.com/subject/vfibmxtx.html