数据库

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

2017-11-10  本文已影响43人  SunnyQjm

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

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

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

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

设关系模式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. 停止,输出结果。
上一篇 下一篇

猜你喜欢

热点阅读