数据库之范式分解

首先我们从题目入手理解:

解决问题过程:

关系模式R(U, F)

1.求F的最小化基本集

2.求所有候选码

3.根据定义判断关系所属范式

4.根据分解算法将关系分解为要求的范式

解:

  • FD{AB->C,C->D,D-> A}已经是最小化基本集(关于如何求解最小化基本集可以看后面的必备知识点)
  • 求候选码:

必备知识点:

  • 求候选码

对于给定的关系R(A1,A2,…An)和函数依赖集F,可将其属性分为4类:

L类  仅出现在函数依赖左部的属性。

R 类  仅出现在函数依赖右部的属性。

LR类  在函数依赖左右两边均出现的属性。

N 类  在函数依赖左右两边均未出现的属性。

定理:对于给定的关系模式R及其函数依赖集F,若X(X∈R)是L类属性,则X必为R的任一候选码的成员。

推论:对于给定的关系模式R及其函数依赖集F,若X(X∈R)是L类属性,且X+包含了R的全部属性;则X必为R的唯一候选码

当X(X∈R)是L类属性,且X+没有包含R的全部属性,则用L和LR类组合求候选码

  • 范式定义:

1NF:强调列的原子性,即列不能再分成其他列

2NF:在1NF的基础上,不存在非主属性对码的部分函数依赖

3NF:在2NF的基础上,不存在非主属性对码的传递函数依赖(对于每个非平凡FD,或者左边是超键,或者右边仅由主属性构成)

BCNF定义的等价语义:属于BCNF的关系模式,每个非平凡依赖的左边必须包括侯选建;

分解成2NF:

分解算法:设关系模式R(U),主键是W,R上存在X→Z,Z是非主属性且XeW,此时W→Z就是一个局部依赖,应将R进行如下分解:(1)将R分解为R1(XZ)(主键是X)和R2(U-Z)(主键是W,外键为X),利用主外键的连接可以得到R;(2)如果R1和R2还不是2NF,则重复上述过程,直到所有关系都满足2NF。

分解成3NF:

把左部组合属性相同的函数依赖中出现的属性放在一个关系里(若分解得到的关系均不包含R的超键,则增加一个关系,其模式为R的任意一个键)

分解成BCNF:

BCNF分解算法  decomposition into BCNF

 输入:关系R0和其上的函数依赖F0  

输出:由R0分解出的关系集合,其中每个关系均属于BCNF  

1 设置R=R0,F=F0  

2 若R已经是BCNF,若返回{R}  

3 若R存在BCNF违例,假设为X->Y。使用属性闭包算法计算X+,选择R1=X+作为关系模式,使用R2包含属性X和不在X+中的属性。

 4 使用FD的投影算法计算R1和R2的FD集,分别记为F1和F2。  5 使用本算法递归地分解R1和R2。返回分解得到的结果集合。

  • 定理   每一个函数依赖集F均等价于一个极小函数依赖集Fm
  •  最小函数依赖集的算法
  1. 右部单一化:即所有的右边不是单个属性的依赖变为单个属性。
  2. 函数依赖最少化:对函数依赖集中每个X->Y假设把这个依赖删除,用剩余的函数依赖求左边属性X的闭包能否包含右边的属性Y,若能包含,则去掉X->Y
  3. 左部最小化:对于函数依赖AB->Y ,去掉A,得B->Y, 用之前的函数依赖集和去掉A后的函数依赖集计算属性B的闭包,若两者相等,则等价A可以去除
  4. 同理看B是否能去掉
  •  例题:

     解:

  • 右部单一化:XY→Z,Z→X,Y→X,Y→Z,M→X,M→Y
  • 函数依赖最少化:
  1. 假设去掉XY→Z,(XY)闭包为(X,Y,Z)包含Z,可以去掉这个函数依赖
  2. Z→X,(Z)闭包为(Z)没有包含X,不能去掉这个函数依赖
  3. Y→X,Y的闭包为(Y,Z,X)包含X,能去掉这个函数依赖
  4. Y→Z,Y的闭包为(Y)没有包含Z,不能去掉这个函数依赖
  5. M→X,  M的闭包为(M,Y)不包含X,不能去掉这个函数依赖
  6. M→Y ,M的闭包为(M,X)没有包含Y,不能去掉这个函数依赖
  7. 所以剩下:Z→X,Y→Z,M→X,M→Y
  • 左部最小化:已经最小化了
  • 所以最后的答案是:{Z→X,Y→Z,M→X,M→Y}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值