数据库/范式

给定关系模式R<U,F>,U={ABCXYZ},F={AB->Y,C->BX,BX->A,B->X}

  1. 求Fmin
  2. 试问属于R的关系是第几范式
  3. 写出分解算法,将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,若是则使用本算法继续递归分解

  1. 右部最简,得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}
  2. 因为CZ+=U,所以属于R的关系的候选码是CZ
    存在非主属性对码的部份依赖,所以该关系模式属于第一范式
    (CZ->B,C->B)
  3. 根据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=Ø
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值