chapter10_关系数据库设计理论_3_模式分解

  • 模式分解

    (1) 目标

    将一个大的关系模式用几个较小的模式代替

    (2) 定义

    关系模式R(U), ρ = {R1(U1), R2(U2), ..., Rk(Uk)}是一个关系模式的集合,若U1∪U2∪...∪Uk = U成立,则ρ是R(U)的一个分解

    (3) 一个关系模式可以有多种不同的分解

    (4) 模式分解的原则

    不丢失信息

    对同样的数据,分解前后的查询结果应相同

    保持函数依赖关系

    不丢失数据间的约束关系

  • 无损连接分解

    (1) 分解后的关系通过自然连接能够恢复为原来的关系,保证连接后的关系与原关系完全一致,则称为无损连接分解

    (2) 有损连接分解可能会丢失元组,也有可能增加元组

    (3) 无损连接分解满足的是模式分解的原则1:不丢失信息

  • 判断一个分解是否是无损连接分解的方法

    (1) 通用方法

    属性集合U: A1, A2, ..., An

    分解 R1, R2, ..., Rk,每个分解包含的都是U的真子集

    函数依赖集F

    步骤

    1° 构造一张表, k行n列,表中每个单元(i行j列)的取值为:

    如果该行对应的分解中包括了该列的属性,填入aj;如果不包含,填入bij

    2° 逐个考察函数依赖集F中的每个依赖关系 Xi -> Yi,若Xi包括了属性Ap,Aq,则在所有行中寻找在Ap,Aq列相等的行。这时再看Yi对应的几个属性列,如果在这些行中对应属性列的取值里出现了aj,则修改其他行的列值都是aj;如果没出现aj,则将这些行的列值修改为这些行中具有最小下标的bij的值。总之,找到的这些在X上相等的行,经过这个步骤以后,它们的Y上也要相等

    3° 对所有F中的函数依赖都操作以后,只要表中出现了一行,它们的值恰好为a1, a2, ..., an,那么该分解为无损分解;否则为有损分解

    (2) 判断只有两个关系连接时的简易方法

    R的一个分解 ρ = {R1, R2},函数依赖集F,如果以下两个表达式至少有一个满足:

      (R1∩R2)->(R1-R2) ∈ F
    
      (R1∩R2)->(R2-R1) ∈ F
    

    则ρ具有无损连接性

  • 分解的保持依赖性

    (1) 判断分解为多个关系以后,分解后的函数依赖关系是否与原函数依赖集等价

    (2) 判断方法

    设函数依赖集为F,分解 R1, R2, ..., Rk

    1° 对分解后的每个关系Ri,求F在Ri上的函数依赖投影Ri(F)

    2° 令G = ∪Ri(F),对F中的每个依赖X->Y,在G中分别计算X的属性闭包,并检验是否包含Y中所有属性;如果G可以蕴含F中的所有函数依赖,则保持分解依赖性

你可能感兴趣的:(chapter10_关系数据库设计理论_3_模式分解)