模式分解算法-满足3NF的无损且保持函数依赖的分解算法、满足BCNF的无损连接分解算法

一、引言

1、对指定的关系模式,若范式级别较低,为第一范式或第二范式,由于存在数据冗余或更新异常问题,在实际中一般是不可用的,关系模式的规范化就是将满足低一级的关系模式分解为若干满足高一级范式的关系模式的集合

2、在函数依赖范围内,希望分解消除数据冗余与操作异常等问题,得到的关系模式均能达到BCNF,并且分解具有无损连接性,同时分解保持函数依赖,但这三个目标有时不能同时满足,一般只能做到如下两点

(1)可以保证分解既具有无损连接性又保持函数依赖,但不能保证分解后的各关系模式属于BC范式,但可以都属于3NF

(2)可以保证分解后的各关系模式都属于BC范式,但只能保证分解再具有无损连接性,不能保证分解保持函数依赖

因此,在实际应用时应根据具体的需求来选择模式分解的方式

二、满足3NF的无损保持函数依赖的分解算法

算法4:分解关系模式为满足3NF的一个无损且保持函数依赖的分解

1、输入、输出

输入:

关系模式R(U,F)

输出:

由R分解出的一个关系模式集合\rho\rho中每个关系模式属于3NF,且分解具有无损连接性并保持函数依赖关系模式集合

2、算法实现流程

(1)寻找F的最小函数依赖集F_{m},令F=F_{m}

(2)对F中的函数依赖集按具有相同左部的原则分组,每一分组中的函数依赖集F_{i},所涉及的全部属性组成一个属性集U_{i},若U_{j}\subseteq U_{i}(i\neq j),就去掉U_{j}

(3)若U_{i}均不包含R的候选键(此处说明必须求出R中所有的候选键),则增加一个只包含候选键的属性集U_{i}

(4)将U_{i}及F在U_{i}上的投影F_{i}构成分解\rho中的一个关系模式R_{i}(U_{i},F_{i})

3、举例:

分析:

(1)由于分解\rho中的关系模式R_{6}中包含了R中的候选键,可用判断一个分解是否为无损连接分解的算法来验证分解\rho具有无损连接性,可验证结果表中包含候选键的关系模式所在的行一定可称为全a

(2)由于F是最小函数依赖集每个分组U_{i}上的函数依赖的左部相同,分解中的每个关系模式R_{i},一定是一个以函数依赖左部为码的3NF,即使对于U_{1}包含于U_{5}U_{3}包含于U_{4}的情况,也只是在分解结果的U_{4}U_{5}中,增加了主属性对于候选键的部分或传递函数依赖,因此\rho是所求分解

四、满足BCNF无损连接分解算法

算法5:分解关系模式为满足BCNF的一个无损连接分解

1、输入和输出

输入:

关系模式R(U,F)

输出:

由R分解出的一个关系模式集合\rho\rho中每个挂你模式都属于BCNF,且分解具有无损连接性

2、递归算法实现流程:

(1)判断R是否属于BCNF,若是,则返回\rho={R};

(2)R不属于BCNF,必有函数依赖X\rightarrow A,X不是R的候选键,计算(X_{F})^{+},将R分解为R_{1}R_{2}U_{1}=(X_{F})^{+},U_{2}=X(U-(X_{F})^{+})=X(U-U_{1});

(3)对F在U_{1}U_{2}进行投影,得到F_{1}F_{2}

(4)返回第(1)步,递归地分解R_{1}R_{2},返回分解得到的结果集合。

3、举例:

 

 分析:

因为在关系模式R_{22}中,包含了R的一个候选键HS,利用判断一个分解是否是无损连接分解的算

法,可以验证该分解\rho具有无损连接性

五、小结

(1)利用不同的模式分解算法可按不同的分解目标实现关系模式的规范化设计

(2)数据库设计者在设计关系数据库时,一般尽可能设计成BCNF模式集

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
3NF(第三范式)和 BCNF(巴斯-科德范式)是关系数据库中的两种范式,用于规范化数据库模式。在某些情况下,一个关系模式可能不符合这些范式,需要进行分解。 以下是3NFBCNF关系模式分解步骤: 1. 针对3NF,先将原始关系模式分解成若干个符合3NF的子关系模式。每个子关系模式都应该只包含一个主键,并且所有非主键属性都必须直接依赖于主键(即不存在传递依赖关系)。如果原始关系模式已经符合3NF,则无需进行分解。 2. 针对BCNF,先将原始关系模式分解成若干个符合BCNF的子关系模式。每个子关系模式都应该只包含一个主键,并且所有非主键属性都必须直接依赖于主键。此外,每个子关系模式中的每个非主键属性都不能依赖于主键以外的其他属性。如果原始关系模式已经符合BCNF,则无需进行分解。 3. 对于符合3NF但不符合BCNF的关系模式,可以通过进一步分解来达到BCNF。具体做法是:找到一个违反BCNF函数依赖,将其提取成一个新的关系模式,该模式包含原来的主键和被依赖的属性,然后将原始关系模式中的这些属性删除。如果新关系模式还存在违反BCNF函数依赖,就继续重复这个过程,直到所有子关系模式都符合BCNF。 需要注意的是,过度分解可能会导致性能问题,因此在进行关系模式分解时需要考虑实际应用场景和数据访问模式

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值