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

如何用数学方法判断指定关系模式分解是否保持依赖?

判断关系模式分解是否保持依赖的数学方法

一、保持依赖分解的核心定义

分解后的子模式对应函数依赖集的并集的闭包,与原函数依赖集F的闭包相等——换句话说,原F中的所有依赖都能通过分解后的子模式的依赖推导得出。实际判断时,只需验证F中的每个函数依赖X→Y,X关于分解后依赖的属性闭包都包含Y。

二、已知条件

  • 原关系模式:R = (A, B, C, D, E, H, I)
  • 原函数依赖集:F = {A→B, C→D, CD→E, BD→AH, H→D, AC→H}
  • 分解后的子模式:R₁=(A,B,C,D,I),R₂=(B,C,E,H)

三、步骤1:计算子模式上的投影依赖集

投影依赖集π_Ri(F)是原F的闭包中,所有属性都属于Ri的函数依赖:

  • π_R₁(F)(仅包含A,B,C,D,I的依赖):
    从F及其闭包中筛选,得到非平凡依赖:A→B、C→D、BD→A(由原依赖BD→AH推导得出BD→A,A属于R₁)。
  • π_R₂(F)(仅包含B,C,E,H的依赖):
    原F及闭包中无符合要求的非平凡依赖(所有原依赖的左部或右部包含R₂外的属性,如CD→E含D,AC→H含A等),仅存在平凡依赖(如X→X)。

分解后的总依赖集为:F₁∪F₂ = {A→B, C→D, BD→A} ∪ 平凡依赖。

四、步骤2:逐一验证原F中的依赖是否被保持

对每个X→Y∈F,计算X关于F₁∪F₂的属性闭包X⁺,判断Y是否完全包含于X⁺:

  1. A→B:
    A⁺ = {A,B}(由F₁中的A→B推导),包含B,依赖被保持。
  2. C→D:
    C⁺ = {C,D}(由F₁中的C→D推导),包含D,依赖被保持。
  3. CD→E:
    CD⁺ = {C,D}(F₁中仅C→D,无其他可推导的属性),不包含E,依赖未被保持。
  4. BD→AH:
    BD⁺ = {B,D,A}(由F₁中的BD→A、A→B推导),不包含H,依赖未被保持。
  5. H→D:
    H⁺ = {H}(F₁∪F₂中无关于H的非平凡依赖),不包含D,依赖未被保持。
  6. AC→H:
    AC⁺ = {A,B,C,D}(由F₁中的A→B、C→D推导),不包含H,依赖未被保持。

五、结论

该分解未保持原函数依赖集F中的多个依赖(CD→E、BD→AH、H→D、AC→H),因此不是保持依赖的分解。


内容的提问来源于stack exchange,提问作者Alan Costa Grey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 13:03:18