You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

函数依赖练习题困惑:BCNF分解及候选键相关问题咨询

函数依赖与BCNF分解问题分析

一、原推导中的错误纠正

1. 规范覆盖推导错误

给定函数依赖集F={ B→E, C→B, CD→E, ABE→C},正确的规范覆盖应为Fc={B→E, C→B, AB→C}:

  • CD→E是冗余依赖:由C→B和B→E可推导C→E,因此CD→E可被逻辑蕴涵,无需保留;
  • 你推导的D→E不成立:原依赖集中无任何路径能由D单独推出E,属于错误添加。

2. R4的范式判断错误

你标注为BCNF的R4=(A,B,C)实际不满足BCNF:

  • R4中存在函数依赖C→B,而C并非R4的超键(C的闭包仅为{C,B},不包含A),违反BCNF“所有非平凡函数依赖的左部必须是超键”的要求。

3. R5的范式判断错误

你标注为3NF的R5=(A,D,B)实际属于BCNF:

  • 该关系模式中不存在任何非平凡函数依赖,所有属性的集合{A,D,B}是候选键,完全符合BCNF的定义(无违反BCNF的依赖关系)。

二、正确的BCNF全分解步骤

原关系R(A,B,C,D,E)的候选键为ABD、ADC,我们通过逐步分解违反BCNF的依赖来完成全分解:

  1. 第一步:分解B→E

    • B→E中B不是超键,分解为:
      • R1=(B,E):函数依赖B→E,B是候选键,满足BCNF;
      • R'=(A,B,C,D):保留剩余属性及相关依赖C→B、AB→C。
  2. 第二步:分解R'中的C→B

    • C→B中C不是R'的超键,分解为:
      • R2=(C,B):函数依赖C→B,C是候选键,满足BCNF;
      • R''=(A,C,D):无任何非平凡函数依赖,候选键为ACD,满足BCNF。

最终得到的BCNF分解结果为:

  • R1=(B,E)(BCNF)
  • R2=(C,B)(BCNF)
  • R3=(A,C,D)(BCNF)

或者也可以采用另一种等价分解方式:将R3=(A,C,D)替换为R3=(A,B,D)(即你之前的R5,本身已是BCNF),再对原错误的R4=(A,B,C)进一步分解——因C→B违反BCNF,分解为R2=(C,B)和R4'=(A,C)(BCNF),最终分解结果为R1=(B,E)、R2=(C,B)、R3=(A,B,D)、R4'=(A,C),所有模式均满足BCNF。

内容的提问来源于stack exchange,提问作者Ofekino97

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 18:50:24