一、已知关系模式R<U,F>,其中U={A,B,C,D,E};F={AB->C,B->D,C->E,EC->B,AC->B};求(AB)。
①、因为题目求的是AB的闭包,所以我们先设X(0)=AB。
②、当求玩X(0)之后,我们要计算X(1)。逐一扫描F集合中的各个函数依赖,找到左部含AB子
集(A、B、AB)的函数依赖。可得:AB->C,B->D。于是,X(1)可以更新为AB
CD=ABCD。
③、判断X(0)和X(1)是否相等。如果不相等,则要继续重复第①、②步骤。在本题中,X(0)
X(1),所以我们要继续找出左部含有ABCD子集(A、B、C、D、AB、AC……)的函数依
赖,可以得到AB->C、B->D、C->E、AC->B。于是,X(2)=X(1)BCDE=ABCDE。
④、由于X(2)=U,所以算法停止。
⑤、我们可以得到求(AB)=ABCDE。
二、设有关系模式R<U,F>,U={ A,B,C,D,E,G },F={ E->D,C->B,CE->G,B->A},求该关系模式的码。
要解本道题,首先我们要知道一个定理:
对于给定的关系模式R及其函数依赖集F,若X(X∈R)是L类属性,则X必为R的任一候选码的
成员。
由此定理可以推出以下的结论:
对于给定的关系模式R及其函数依赖集F,若X(X∈R)是L类属性,且X+包含了R的全部属
性;则X必为R的唯一候选码。
通俗的解释,或者说如果只是想应付题目,我们可以理解为,在左部出现的一定在候选码中。
如果我们求出了某属性集的闭包等于U,那么这个属性集就是唯一的候选码。
所以本题的解题步骤为:
①、对属性进行分组,仅出现在函数依赖左部的属性为L(我们可以理解为Left)={E,C};既出现在
左部,又出现在右部的属性为LR(Left&Right)={B}。
②、求L中各属性的闭包。E={ E,D },C
={ C,B,A }。
③、求LR中各属性的闭包。B={B,A}。
④、因为(EC)={E,D,C,B,A,G }=U,所以EC为码。
以上例题均来自于《数据库基础教程》第三版。