数据库系统工程师 · 高频练习

关系模式分解后,怎样判断无损连接和依赖保持?

中级 单选题 第 829 题 中等 数据库系统工程师无损连接依赖保持函数依赖关系模式分解
题目

关系模式 R(A,B,C) 上有函数依赖集 F={A→B,B→C}。将 R 分解为 R1(A,B) 和 R2(B,C),关于该分解的说法正确的是()。

A 既是无损连接分解,又保持函数依赖
B 是无损连接分解,但不保持函数依赖
C 不是无损连接分解,但保持函数依赖
D 既不是无损连接分解,也不保持函数依赖
题目类型:原创高频练习题 用途:用于帮助理解数据库系统工程师相关考点和答案解析,不等同于官方真题。
正确答案
A
答案解析

R1∩R2={B},而由 F 可知 B→C,因此 B→R2,满足二元分解无损连接的判定条件。依赖 A→B 完整地落在 R1 中,B→C 完整地落在 R2 中,所以原依赖可以分别在子关系中检查,分解也保持函数依赖。

选项分析

A

正确。公共属性 B 能决定 R2,且两条原依赖分别保存在 R1、R2 中。

B

错误。A→B 与 B→C 都可以在单个子关系内检查,并未丢失依赖保持性。

C

错误。R1∩R2={B} 且 B→R2,满足无损连接条件。

D

错误。该分解同时具备无损连接和依赖保持两个性质。

本题为什么容易错

不少同学看到分解后需要做连接,就误以为可能有损。真正的判断标准不是“要不要连接”,而是连接时会不会产生原关系中不存在的伪元组。

先看结论

简短答案

关系模式分解后,怎样判断无损连接和依赖保持,正确答案是 A(既是无损连接分解,又保持函数依赖)。R1∩R2={B},而由 F 可知 B→C,因此 B→R2,满足二元分解无损连接的判定条件。依赖 A→B 完整地落在 R1 中,B→C 完整地落在 R2 中,所以原依赖可以分别在子关系中检查,分解也保持函数依赖。

解析

易混淆概念对比表

概念本题判断区别要点记忆提示
既是无损连接分解,又保持函数依赖 本题正确答案 正确。公共属性 B 能决定 R2,且两条原依赖分别保存在 R1、R2 中。 看到题干核心场景时优先联想到它
是无损连接分解,但不保持函数依赖 本题干扰项 错误。A→B 与 B→C 都可以在单个子关系内检查,并未丢失依赖保持性。 看到该词不要急着选,先判断是否真正解决题干问题
不是无损连接分解,但保持函数依赖 本题干扰项 错误。R1∩R2={B} 且 B→R2,满足无损连接条件。 看到该词不要急着选,先判断是否真正解决题干问题
既不是无损连接分解,也不保持函数依赖 本题干扰项 错误。该分解同时具备无损连接和依赖保持两个性质。 看到该词不要急着选,先判断是否真正解决题干问题
本题易混淆选项怎么区分
  • 是无损连接分解,但不保持函数依赖:错误。A→B 与 B→C 都可以在单个子关系内检查,并未丢失依赖保持性。
  • 不是无损连接分解,但保持函数依赖:错误。R1∩R2={B} 且 B→R2,满足无损连接条件。
  • 既不是无损连接分解,也不保持函数依赖:错误。该分解同时具备无损连接和依赖保持两个性质。
复习

知识点详解

无损连接和依赖保持是关系模式分解的两个独立质量指标。对 R 分解为 R1、R2 的情形,若 (R1∩R2)→R1 或 (R1∩R2)→R2 能由 F 推出,则分解无损。依赖保持则要求把 F 投影到各子模式后,这些投影依赖的并集仍能推出 F。无损连接防止连接时引入伪元组,依赖保持则让约束检查不必每次连接多个表。理想分解往往希望两者兼得,但在某些 BCNF 分解中可能需要在更高范式与依赖保持之间权衡。

备考速记

无损看能不能还原数据,依赖保持看能不能就地检查规则。

关系模式分解在关系模式分解场景中的作用

关系模式分解在本题中的核心价值,是解决“关系模式 R(A,B,C) 上有函数依赖集 F={A→B,B→C}。将 R 分解为 R1(A,B) 和 R2(B,C),关于该分解的说法正确的是()”这个场景问题。复习时不要只背选项名称,还要理解它为什么适用于该场景,以及它能解决哪类安全、流程或管理问题。

拓展

同类题怎么考

  • 给出二元分解,用公共属性判断是否无损连接。
  • 给出多个函数依赖,判断哪些依赖被完整保留在子模式中。
  • 在 3NF、BCNF 分解中同时考查范式、无损连接和依赖保持。
关系模式分解在数据库系统工程师软考中的考法

软考选择题通常不会只考概念定义,还会把关系模式分解放到关系模式分解场景中,要求判断它的作用、适用范围或与相近概念的区别。遇到这类题时,先抓住题干中的业务场景,再看哪个选项最能解决该场景下的核心问题。

解题思路

建议分两行写。这是关系模式分解题最稳的处理方式:第一行只看公共属性 B 能不能决定某一个子模式,B 能决定 R2 的 B、C,所以无损;第二行把原依赖逐条放回去,A→B 在 R1,B→C 在 R2,两条都没有被拆散,所以保持依赖。

考点定位

无损连接回答“自然连接能否准确恢复原关系”,依赖保持回答“原函数依赖能否在各子关系内直接维护”,两者要分开判断。

易错提醒

  • 只验证范式,没有检查分解是否无损。
  • 认为无损连接必然推出依赖保持,或反过来。
  • 使用公共属性判定时,忘记要在 F 的闭包下判断能否决定某个子模式。

备考提示

  • 二元分解先写交集,再检查交集是否函数决定 R1 或 R2。
  • 依赖保持要把投影到各子模式的依赖合起来,看能否推出原依赖集。

你可能还想了解

  • 二元分解的无损连接判定条件是什么?
  • 无损连接与依赖保持有什么区别?
  • 为什么保持依赖能减少跨表连接检查?
  • BCNF 分解一定保持函数依赖吗?

本文小结

本题公共属性为 B,且 B→R2,因此分解无损;A→B 和 B→C 又分别保存在 R1、R2 中,因此同时保持函数依赖。判断时要把“数据能否还原”和“约束能否局部检查”分成两步。