关系模式 R(A,B,C) 上有函数依赖集 F={A→B,B→C}。将 R 分解为 R1(A,B) 和 R2(B,C),关于该分解的说法正确的是()。
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(既是无损连接分解,又保持函数依赖)。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 中,因此同时保持函数依赖。判断时要把“数据能否还原”和“约束能否局部检查”分成两步。