概念:

1、主关键字(primary key):通常称为主键,常见的如字段中的ID等,本身无业务含义,却能通过它来找到唯一一条记录。常见的操作是根据主键来实现增删改查。如果没有主键的话,实现删、改、查就显得比较困难了,很容易操作错误。

2、超关键字(Super keyword):相比主关键字,有可能有多个字段构成,且有可能有多余的列。

3、候选关键字(Candidate Key):候选关键字是超关键字的子集,区别是候选关键字的列,没有一个是多余的,假如去掉某一列,则不能再唯一的确定一条记录了。

题目:

 设关系模式R(U, F),其中R上的属性集U={A, B, C, D, E},R上的函数依赖集F={A→B,DE→B,CB→E,E→A,B→D}.

(7) 为关系R的候选关键字。分解 (8) 是无损连接,并保持函数依赖的。

(7)A.AB   B.DE   C.CE   D.CB

(8)A.p={R1(AC),R2(ED),R3(B)}     B.p={R1(AC),R2(E),R3(DB)}

    C.p={R1(AC),R2(ED),R3(AB)}  D.p={R1,(ABC),R2(ED),R3(ACE)}

 

解析:

先看函数依赖,看着好多列都互相关联或者组合关联,我们从候选关键字的含义来入手,假如去掉某一列,则不能再唯一确定一条记录了,那么问题简单了,咱们就找哪些列缺少,是无法通过函数依赖集推导出来呢?为了便于分析,我们把函数依赖集制作个表格。

说明:

  原列:罗列了函数依赖集左侧涉及的列;

  目标列:列出了可以通过原列能够推导出的列。

那么我们观察下,有哪些列是无法通过原列来推导出来呢?答案是C。

无法通过函数集推导的C列,就是咱们必须要加入到候选关键字里的最关键的列

其实,分析到此,已经可以对比答案,得到答案是C选项了,只有C选项中包含“C”;

那么仅一个C能否推导出全部吗?看上述表中,显然不行,那就再增加列。可选的有:A,B,D,E;

再分析下如下组合是否能唯一确定ABCDE呢?

CA,CB,CD,CE

CA : A→B→D;CB→E  可以通过CA推导出全部列 √

CB : B→D;CB→E;E→A  可以通过CB推导出全部列 √

CD :  无法推出其余列 ×

CE : E→A→A→B→D;  可以通过CA推导出全部列 √

那么还有别的候选关键字吗?我们可以试试这个组合
CDE :DE→B; E→A  可以通过CA推导出全部列 ,但是有个问题,如果把D列去掉,能推出全部列吗?是可以的,推导就变成了上面的CE的逻辑了,这个显然是超关键字的范畴,而非候选关键字 ×

所以本题候选关键字可以是如下几个:CA,CB,CE

 

接下来咱们讨论分解表且保持无损连接和函数依赖:

比较绕口,但是其实实际开发中经常使用。

分解表:一个表拆分成多个表;

比如学生信息表(身份证号,姓名,班级编号,班级名称,学校编码,学校名称)

分解成:人员表(身份证号,姓名)、班级表(班级编号,班级名称,学校编码,学校名称)、学生表:(班级编号,身份证号);

如何保持无损连接呢?答案就是,不管拆分多少个表,如果用join的方式,能把所有的列都凑成拆分前就成。比如拆分前是N个列,不管拆分后总共多少列,他们都能通过表间关联查询,能够凑够拆分前的N列就成;

如何保持函数依赖呢?所谓函数依赖,就是要在拆分后的单个表里,能够找到所有函数依赖,否则就是依赖丢失。

如果想要计算出所有结果计算量有点大,我们可以分析选项来解答此题,此缺少哪些依赖呢?可以把R1,R2,R3中涉及的函数依赖都列出来:

A.p={R1(AC),R2(ED),R3(B)}   

通过观察,发现选项中R1,R2,R3 把F={A→B,DE→B,CB→E,E→A,B→D}的依赖一个都没匹配

B.p={R1(AC),R2(E),R3(DB)}

同上,匹配的依赖:B→D;缺少依赖:F={A→B,DE→B,CB→E,E→A}.

C.p={R1(AC),R2(ED),R3(AB)}  

匹配的依赖:A→B;缺少依赖:F={DE→B,CB→E,E→A,B→D}.

D.p={R1,(ABC),R2(ED),R3(ACE)}

匹配的依赖:

A→B: R1(ABC) =  F(A,B)

 

CB→E::F(A,B) +R3(ACE) = ABCE = F(CB,E)

E→A:R3(ACE)=  F(E,A)
DE→B:F(E,A)+F(A,B)+R2(ED) = ABEDF(DE,B)

B→D:F(E,A)+F(A,B)+R2(ED) = ABEDF(B,D)

D通过验证,没有缺少的函数依赖,所以,答案是D;

参考资料里有通过初始判断表的方式来求解,感觉没这样直观。

 

posted on 2023-04-26 17:33  小顾变老顾  阅读(658)  评论(0)    收藏  举报