候选码、主码、主属性辨析与练习
辨析
1. 候选码:其闭包为整个U,也就是说U是完全依赖于候选码的(大多数情况存在传递依赖),候选码可能有多个。
2. 超码:U是部分依赖于超码的,简单来说就是超码是候选码中加了一些可有可无的东西。
3. 主码:如果候选码多于一个,则选择其中一个作为主码(因为随便哪个都能能被U完全依赖)。
(主码、候选码都称为码,要自己分析)
4. 主属性:包含在任何一个候选码中的属性为主属性,意思就是所有候选码的并集的组合拆分为一个一个属性(主属性不可能什么都没有,有可能是整个U),这些属性就是主属性。(可以在候选码练习中看到)
方法
1. L类:只在左边出现
R类:只在右边出现
LR类:同时在左边和右边出现
NULL类:左边右边都没有出现
2. 先化简,将右边全部拆为1个值。
属于L类的都是候选码的一部分,并且都是主属性。如果此类已经可以直接推出U,则表示候选码就是L类的了,无需继续后面的操作
属于R类的都一定不在候选码里
属于LR类的:1. 如果L类有,且只有L类无法推出U,就依次拿单个LR类与L类的组合,看是不是码
2. 如果经过与第一轮与一个LR匹配后,剩下的不能匹配的LR则两两组合,再与L全体组合看能不能推出U,如果可以,也是候选码。
3. 以此类推......
例题
R<U,F>,U=(A,B,C,D,E,G),F={AB-->C,CD-->E,E-->A,A-->G}
1. 左边集合为{ABCDE},右边集合为{ACEG}。可知BD只在左边出现,一定为候选码的一部分,BD+->BD;G只在右边出现,一定不在候选码中。
2. BD与A组合,求ABD的闭包:ABD+->ABD
AB->C => ABD+->ABCD
CD->E => ABD+->ABCDE
A->G => ABD+->ABCDEG=U,因此ABD为候选码
BD与C组合,求BCD的闭包:BCD+->BCD
CD->E => BCD+->BCDE
E->A => BCD+->ABCDE
A->G => BCD+->ABCDEG=U,因此BCD也为候选码
BD与E组合,求BDE的闭包:BDE+->BDE
E->A => BDE+->ABDE
AB->C => BDE+->ABCDE
A->G => BDE+->ABCDEG=U,因此BDE也为候选码
3. 因此ABD、BCD、BDE皆为候选码,主属性为A、B、C、D、E。
R(A, B, C, D), F={B->D, AB->C}
1. 左边={AB},右边={CD},候选码为AB,主属性为A、B。
R(A, B, C, D), F={A->B, A->C, D->A}
1. 左边={AD},右边={ABC},因此候选码不可能有B、C;必然有D,D+->DABC=U。因此D为候选码,主属性为D。
R(A, B, C, D), F={BCD->A, A->C}
1. 左边={ABCD},右边={AC}。BD是左边独有的,一定是候选码的一部分,BD+->BD。
2. BD与A组合,ABD+ -> ABDC=U,因此ABD为候选码。
BD与C组合,BCD+ -> ABCD=U,因此BCD为候选码。
3. ABD、BCD皆为候选码,主属性为A、B、C、D。
R(A, B, C, D), F={B->C, B->D, CD->A}
1. 左边={BCD},右边={ACD},A不可能是候选码,B是候选码一部分,B+->BCDA=U,因此候选码为B,主属性为B
R(A, B, C, D, E, F), F={A->BC, CD->E, B->D, BE->F, EF->A}
1. L类:无;R类:无;
LR类:A、B、C、D、E、F;NULL类:无
2. 先将右边全部化简为1个,F={A->B, A->C, CD->E, B->D, BE->F, EF->A}
2. A+ -> {A, B, C, D, E, F},A是候选码
B+ -> {BD}
C+ -> {C}
D+ -> {D}
E+ -> {E}
3. BC+ -> {B, C, D, E, F, A},BC是候选码
BD+ -> {B, D}
BE+ -> {B, E, D, F, A, C},BE是候选码
BF+ -> {B, F, D}
CD+ -> {C, D, E}
CE+ -> {C, E}
CF+ -> {C, F}
DE+ -> {D, E}
DF+ -> {D, F}
EF+ -> {E, F, A, B, C, D},EF是候选码
4. 不能有A,BC,BE,EF
BDF+ -> {B, D, F}
CDE+ -> {C, D, E}
CDF+ -> {C, D, F, E, A, B},CDF是候选码
5. 综上,A、BC、BE、EF、CDF为候选码;主属性为A、B、C、D、E、F。