数据库系统——3NF与BCNF模式分解

【判定原则】

对于关系模式R,有属性集U和函数依赖集F

        3NF:F中任意函数依赖“α→β”的左右属性,都必须是候选码的一部分(或候选码本身)

        BCNF:F中所有左边的属性,都是候选码(闭包为U)

     (注:这里省略了平凡的情况和只有两个元素的简单情况,它们显然都满足3NF和BCNF)

【分解步骤】:

  1. 进行BCNF判定,若满足直接结束(肯定也满足3NF)。否则进入下一步
  2. 求F的正则覆盖Fc,获得候选码
  3. 判定是否为3NF,若是直接执行第五步
  4. 3NF分解
    1. 将R按照Fc中的依赖直接依次拆分成单个关系模式
    2. 若候选码不在F的关系左侧,则单独添加一个候选码的关系模式
  5. BCNF分解
    1. 选择第一个不满足BCNF的函数依赖”α→β”,分解为关系模式R(α, β)和R(α, (U-α-β))
    2. 计算不含β的新函数依赖集F’,检查R(α, (U-α-β))是否满足条件,若不满足,重复步骤i)。

R1:U(ABCD), F: {AB→C, C→D, D→A}

  • Step1:不满足BCNF,计算候选码
  • Step2:Fc=F,候选码: AB, BC, CD
  • Step3:满足3NF条件,直接进行BCNF分解
  • Step4:BCNF分解
    • 选择第一个不满足BCNF的函数依赖C→D,分解为R11=CD,R12=CAB
    • R12保持函数依赖为F12={AB→C,C→A},依然不满足。取第一个不满足的函数依赖C→A,分解为R121=CA, R122=CB。分解结束
  • Step5:综上
    • 3NF无需分解
    • BCNF分解为{CD, CA, CB}
  •                                   

R2:U(ABCD), F: {B→C, B→D}

  • Step1:不满足BCNF,计算候选码
  • Step2:Fc={B→CD},候选码: AB
  • Step3:不满足3NF条件,进行两次分解
  • Step4:3NF分解:
    • 直接分解为R21=BCD
    • 由于F中不包含候选码,故单独添加:R22=AB
  • Step5:BCNF分解
    • 选择第一个不满足BCNF的函数依赖B→C,分解为R21=BCR22=BD,均满足条件
    • 由于F中不存在A,故单独添加R23=AB
  • Step6:综上
    • 3NF分解为{BCD, AB}
    • BCNF分解为{BC, BD, AB}

R3:U(ABCD), F: {AB→C, BC→D, CD→A, AD→B}

  • Step1:满足BCNF,无需分解。直接结束
  • Step2:综上
    • 3NF无需分解
    • BCNF无需分解

R4:U(ABCD), F: {AB→C, DE→C, B→D}

  • Step1:不满足BCNF,计算候选码
  • Step2:Fc=F,候选码: ABE
  • Step3:不满足3NF条件,进行两次分解
  • Step4:3NF分解:
    • 直接分解为R41=ABC, R42=DEC, R43=BD
    • 由于原F中不包含候选码,故单独添加:R44=ABE
  • Step5:BCNF分解
    • 选择第一个不满足BCNF的函数依赖AB→C,分解为R41=ABC,R42=ABDE
    • R42保持函数依赖为F42={B→D},依然不满足。取第一个不满足的函数依赖B→D,分解为R421=BD, R422=BAE。均满足条件。
  • Step6:综上
    • 3NF分解为{ABC, DEC, BD, ABE}
    • BCNF分解为{ABC, BD, BAE}

R5:U(ABCDEF), F: {A→B, C→DF, AC→E, D→F}

  • Step1:不满足BCNF,计算候选码
  • Step2:Fc={A→B, C→D, AC→E, D→F},候选码: AC
  • Step3:不满足3NF条件,进行两次分解
  • Step4:3NF分解:
    • 直接分解为R51=AB, R52=CD, R53=ACE, R53=DF
  • Step5:BCNF分解
    • 选择第一个不满足BCNF的函数依赖A→B,分解为R51=AB,R52=ACDEF
    • R52保持函数依赖为F52={C→D, AC→E, D→F},依然不满足。取第一个不满足的函数依赖C→D,分解为R521=CD, R522=CEFA
    • R522保持函数依赖为F522={AC→E, C→F},依然不满足。取第一个不满足的函数依赖C→F,分解为R5221=CF, R5222=CAE, 均满足条件。
  • Step6:综上
    • 3NF分解为{AB, CD, ACE, DF}
    • BCNF分解为{AB, CD, CF, CAE}

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值