软考-软件设计师:数据库技术基础-关系数据库的规范化:模式分解及分页应具有的特性(保持函数依赖、无损连接性)

分解依据

为了让关系模式符合范式,要分解模式,分解后的模式是否与原来的模式等价,有3种情况:

  • 分解具有无损连接性。
  • 分解要保持函数依赖。
  • 分解既要无损连接性,又要保持函数依赖。

保持函数依赖

设数据库模式 p={R1,R2,···,Rk} 是关系模式R的一个分解,F是R上的函数依赖集,p中每个模式Ri上的FD集是Fi。如果{F1,F2,···,Fk}与F是等价的(即相互逻辑蕴涵)那么称分解p保持FD。

例1

设关系模式 R(U,F),其中 U={A,B,C,D,E},F={A→BC,C→D,BC→E,E→A},

  1. 分解 p={R1(ABCE),R2(CD)} 是否保持函数依赖?
  2. 分解 p={R1(ABE),R2(CD)} 是否保持函数依赖?

答案1:

保持依赖,因为:

  • R1(ABCE):保持 A→BC,BC→E,E→A
  • R2(CD):保持 C→D

答案2:

没有保持,因为 R1(ABE) 没有 C,没有保持 BC→E

例2

设关系模式 R(U,F),其中 U={A,B,C},F={A→B,B→C,A→C},则分解 p={R1(AB),R2(BC)} 是否保持函数依赖?

答案:

保持依赖,因为:

  • R1(AB) 中,保持 A → B、A → C

  • R2(BC) 中,保持 B → C

无损连接分解

  • 有损:不能还原
  • 无损:可以还原

无损连接分解:指将一个关系模式 分解 成若干个关系模式后,通过 自然连接 等运算仍能 还原到原来 的关系模式

自然连接:以 同名列 进行 等值 匹配,重复属性保留一个

定理:基于候选键和函数依赖的分析法

应用场景: 1拆2 判断无损

如果R的分解为 p={R1,R2},F为R所满足的函数依赖集合,分解p具有无损连接性的充分必要条件是:

R1 ∩ R2 → (R1 - R2) 或 R1 ∩ R2 → (R2 - R1)

解释:

  • R1 ∩ R2:表示 R1 和 R2 的交集,为R1与R2中 公共属性组成

  • R1 - R2:表示模式的差集,结果是 R1 中有但 R2 中没有的属性

  • R2 - R1:表示模式的差集,结果是 R2 中有但 R1 中没有的属性

整体解释:R1 ∩ R2 的结果能够推导出 (R1 - R2),或者,R1 ∩ R2 的结果能够推导出 (R2 - R1),就说明无损连接

例子

有关系模式:成绩(学号,姓名,课程号,课程名,分数)
函数依赖:学号→姓名,课程号→课程名, (学号,课程号)→分数

若将其分解为:

  • 成绩(学号,课程号,分数)
  • 学生(学号,姓名)
  • 课程(课程号,课程名)

请思考该分解是否为无损分解?

答题方法1,两两合并判断发:
  1. 先合并 成绩(学号,课程号,分数) 和 学生(学号,姓名) :

    1. 通过同名属性 学号 自然连接
    2. 由于有:学号 → 姓名,学号 能够 确定 姓名
    3. 所以合并结果:合并关系1 (学号,课程号,分数,姓名)
  2. 再与 课程(课程号,课程名) 合并:

    1. 通过同名属性 课程号 自然连接
    2. 由于有:课程号 → 课程名,课程号 能够 确定 课程名
    3. 所以合并结果:合并关系2(学号,课程号,分数,姓名,课程名)

能够还原,所以是无损连接

答题方法2,表格法(Chase Algorithm):

例子

提示: 1拆2 判断无损,推荐 基于候选键和函数依赖的分析法

第一问答案

P1 = { R1(AB) , R2(AC) }

判断是否保持依赖:通过 R1(AB) 可知与题干 F = { A → B} 相同,说明保持依赖

判断是否无损连接(基于候选键和函数依赖的分析法):

  1. R1 ∩ R2 的结果是 A
  2. R1 - R2 的结果是 B
  3. 符合题干 A → B

说明是无损连接

(不适合)判断是否无损连接(两两合并发):合并 R1(AB) 和 R2(AC):

  1. 通过同名属性 A 自然连接
  2. 由于 A → B,A能确定B
  3. 合并结果 合并(ABC)

与分解前相同,是无损

最终:保持依赖且无损

第二问答案

P2 = { R1(AB) , R3(BC) }

判断是否保持依赖:通过 R1(AB) 可知与题干 F = { A → B} 相同,说明保持依赖

判断是否无损连接(基于候选键和函数依赖的分析法):

  1. R1 ∩ R2 的结果是 B
  2. R1 - R3 的结果是 A
  3. R3 - R1 的结果是 C
  4. 题干只有 A → B,所以 B 无法推导 A 或 C

最终:保持依赖,但有损连接

例子

答案

D

判断是否无损:

  1. (A1,A2) ∩ (A1,A3) 的结果是 A1
  2. (A1,A2) - (A1,A3) 的结果是 A2
  3. (A1,A3) - (A1,A2) 的结果是 A3
  4. A1 无法推导出 A2 或 A3

所以是有损

判断是否保持依赖:

  • (A1,A2):不符合任何依赖
  • (A1,A3):不符合任何依赖,注意:看似符合 A1A3 → A2,其实不符合,因为 没有 A2

所以是不保持函数依赖


原文出处:/show_1GW12txlXm9r.html