给定关系模式R<U,F>,U={ABCXYZ},F={AB->Y,C->BX,BX->A,B->X}
- 求Fmin
- 试问属于R的关系是第几范式
- 写出分解算法,将R分解为3NF并保持函数依赖和具有无损连接性
求最小化基本集的方法如下:
一般直接从题目所给的FD集合开始推,先将右边有多个属性的FD分解,然后删去集合中能被其他FD推出来的FD;对于左边有至少两个以上属性的FD,例如本题中的AB->Y,将其分为A->Y(或B->Y),观察A->Y(或B->Y)能否被集合F中的FD所推出来(注意:此时FD中仍考虑AB->Y),若能,则用A->Y(或B->Y)替换AB->Y
主属性
某个主键的成员称为主属性,例如已知主键为ABE,则主属性有A,B,E,其余为非主属性
部分函数依赖
设X,Y是关系R的两个属性集合,存在X→Y,若X’是X的真子集,存在X’→Y,则称Y部分函数依赖于X。
例如,有学生基本信息表R(学号,身份证号,姓名),学号属性取值是唯一的,在R关系中,(学号,身份证号)->(姓名),(学号)->(姓名),(身份证号)->(姓名);所以姓名部分函数依赖与(学号,身份证号);
第一范式(1NF)
在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库;1NF强调列的原子性,某一属性不能拥有几个值
第二范式(2NF)
2NF建立在1NF的基础上,即满足2NF一定满足1NF;除满足1NF外还有两个条件,一是表必须有一个主键;二是非主属性必须完全依赖于主键,而不能为部分依赖
第三范式(3NF)
对于每个非平凡FD,或者其左边是超键,或者其右边仅由主属性构成
BC范式(BCNF)
每个非平凡FD的左边必须包含键,不一定要最小化,可以是超键;任意一个二元关系属于BC范式
异常
关系异常包括冗余、更新异常、删除异常;一般用分解关系的方法来消除异常
将关系R分解为均属于3NF的关系集合
从题目所给的FD集合出发,推出最小基本集;对于最小基本集中的每一个FD(X->A),将XA作为分解出的某个关系的模式;若分解出的关系模式均不包含R的超键,则增加一个关系,其模式为R的任何一个键
分解包含无损连接,具有依赖保持性质
将关系R分解为均属于BCNF的关系集合
找出R中违反BCNF的FD(X->Y),计算X的闭包X+,选择R1=X+作为一个关系模式,并使另一个关系模式R2=属性X以及不在X+中的属性;继续判断R1,R2是否违反BCNF,若是则使用本算法继续递归分解
- 右部最简,得F1={AB->Y,C->B,C->X,BX->A,B->X}
依赖最简,得F2={AB->Y,C->B,BX->A,B->X}
左部最简,得F3={B->Y,C->B,B->A,B->X} - 因为CZ+=U,所以属于R的关系的候选码是CZ
存在非主属性对码的部份依赖,所以该关系模式属于第一范式
(CZ->B,C->B) - 根据Fmin按左部相同原则分组,得R1:U1={A,B,X,Y},R2:U2={BC},由于U1,U2不包含码,以下分解为3NF的无损连接和保持函数依赖的分解:
R1:U1=ABXY,F1={B->Y,B->A,B->X}
R2:U2=BC,F2={C->B}
R3:U3=CZ,F3=Ø