ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

**函数依赖(Functional Dependency, FD)** 和 **候选键(Candidate Key)** 是关系数据库理论中的核心概念

**函数依赖(Functional Dependency, FD)** 和 **候选键(Candidate Key)** 是关系数据库理论中的核心概念 在软考尤其是数据库系统工程师、信息系统项目管理师等科目中函数依赖Functional Dependency, FD和候选键Candidate Key是关系数据库理论中的核心概念常出现在选择题、简答题甚至案例分析题中。一、函数依赖FD定义设关系模式 $ R(U)X, Y \subseteq U $若对 $ R $ 的任意两个元组 $ t_1, t_2 $只要 $ t_1[X] t_2[X] $就有 $ t_1[Y] t_2[Y]则称∗∗则称 **则称∗∗X $ 函数决定 $ Y $**记作 $ X \rightarrow Y $。$ X $ 称为决定因素determinant$ Y $ 称为依赖因素dependent。关键性质自反律若 $ Y \subseteq X $则 $ X \rightarrow Y $增广律若 $ X \rightarrow Y $则 $ XZ \rightarrow YZ $传递律若 $ X \rightarrow Y $ 且 $ Y \rightarrow Z $则 $ X \rightarrow Z $Armstrong 公理系统可推导所有逻辑蕴含的 FD二、候选键Candidate Key定义设关系模式 $ R(U, F) $其中 $ F $ 是函数依赖集。若 $ K \subseteq U $ 满足完全函数依赖性$ K \rightarrow U $即 $ K $ 能唯一确定所有属性最小性对任意真子集 $ K’ \subsetneq K $都有 $ K’ \nrightarrow U $即 $ K $ 中无冗余属性。则称 $ K $ 为一个候选键。所有候选键中任选其一作为主键Primary Key若某属性不包含在任何候选键中则称为非主属性non-prime attribute若某属性包含在至少一个候选键中则称为主属性prime attribute。✅快速判断候选键方法常用软考技巧先找出只出现在左部决定侧的属性 → 必在所有候选键中如 A、B再找出只出现在右部依赖侧的属性 → 必为非主属性如 C、D对“左右都出现”的属性需结合闭包计算如用 $ X^ $ 判断是否 $ X^ U $计算属性集闭包 $ X^ $从 $ X $ 出发反复应用 FD直到无法新增属性为止若 $ X^ U $则 $ X $ 是超键再验证最小性得候选键。 软考典型例题简化版给定关系模式 $ R(A,B,C,D,E) $函数依赖集$ F { A \rightarrow B,; B \rightarrow C,; D \rightarrow E,; A!D \rightarrow C } $求 R 的所有候选键。解法步骤左部仅出现A、B、D → 可能含于候选键右部仅出现C、E → 非主属性计算闭包$ A^ ABC $ ≠ 全集$ D^ DE $ ≠ 全集$ AD^ $初始 {A,D}A→B ⇒ B → {A,D,B}B→C ⇒ C → {A,D,B,C}D→E ⇒ E → {A,B,C,D,E} U∴ $ AD^ U $AD 是超键检查最小性A⁺≠UD⁺≠U ⇒ AD 是候选键是否还有其他尝试 AB但 AB ⊃ A且 A 不是超键AB 非最小同理 AD 是唯一最小超键 →候选键仅 {AD}。# 辅助计算属性闭包的小工具伪代码/思路defclosure(X,F):resultset(X)changedTruewhilechanged:changedFalseforlhs,rhsinF:# lhs→rhsifset(lhs).issubset(result)andnotset(rhs).issubset(result):result|set(rhs)changedTruereturnresult判断一个关系模式 $ R(U, F) $ 是否满足BCNFBoyce-Codd 范式核心在于所有非平凡的函数依赖的决定因素都必须是超键superkey。而由于候选键是最小超键因此等价于每个非平凡函数依赖 $ X \rightarrow Y $ 中的 $ X $ 必须包含某个候选键即 $ X $ 本身是一个超键。✅ BCNF 定义精炼版关系模式 $ R(U, F) $ 属于 BCNF当且仅当对 $ F^ $即 $ F $ 的闭包中的每一个非平凡函数依赖$ X \rightarrow Y $其中 $ Y \nsubseteq X $都有$ X $ 是 $ R $ 的一个超键即 $ X^ U $属性全集。⚠️ 注意BCNF 要求所有非平凡 FD 的左部都是超键 —— 不仅是给定的 $ F而是其逻辑蕴含的所有FD但实际考试中软考只需检查∗∗而是其逻辑蕴含的所有 FD但实际考试中软考只需检查 **而是其逻辑蕴含的所有FD但实际考试中软考只需检查∗∗F $ 中的每一个非平凡 FD** 是否满足该条件因若 $ F $ 中每个 FD 左部都是超键则其闭包中任意导出的 FD 左部也必为超键或更大数据集仍为超键。 判定步骤软考实用四步法步骤操作说明① 求出所有候选键使用闭包法如 $ K^ $ 计算找出 $ R $ 的全部候选键候选键是判断“是否为超键”的基准只有含候选键或其超集的属性集才是超键② 列出 $ F $ 中所有非平凡 FD排除形如 $ X \rightarrow X $ 或 $ Y \subseteq X $ 的平凡依赖例如 $ AB \rightarrow C、、、D \rightarrow E $ 是非平凡$ A \rightarrow A $ 或 $ AB \rightarrow A $ 是平凡忽略③ 对每个非平凡 FD $ X \rightarrow Y $验证 $ X $ 是否为超键计算 $ X^ $若 $ X^ U $则 $ X $ 是超键否则不满足 BCNF若存在任一 $ X \rightarrow Y \in F $ 使得 $ X^ \neq U $则R 不属于 BCNF④ 结论全部 FD 的左部均为超键 → 满足 BCNF否则不满足注意即使某 FD 左部是候选键的真超集如 $ ABC $而候选键是 $ AB $只要 $ ABC^ U $仍满足因超键允许冗余属性 软考典型例题带解析设关系模式 $ R(A,B,C,D) $函数依赖集$ F { AB \rightarrow C,; C \rightarrow D,; D \rightarrow A }问 问问R $ 是否满足 BCNF解求候选键尝试 $ AB^ $AB → C → D → A ⇒ AB⁺ {A,B,C,D} U ⇒ AB 是超键检查最小性A⁺ ? 由 $ D\rightarrow A $ 但 D 未知A⁺ {A}B⁺ {B}故 AB 是候选键。尝试 $ C^ $C → D → A → C ⇒ C⁺ {A,C,D} ≠ U缺 B尝试 $ D^ $D → A → ? 无 A→B故 D⁺ {A,D}尝试 $ BC^ $B,C → D,A ⇒ C,D,A,B ⇒ U但 BC ⊃ C且 C 不是候选键需验证最小性B⁺{B}, C⁺{A,C,D} ⇒ BC⁺U但 B 和 C 单独不行BC 是候选键再看BC⁺中能否推出 B不能直接但已有 B∈初始集 ⇒ BC⁺U再检查子集B⁺≠UC⁺≠U ⇒ BC 是候选键。同理可得候选键有 AB、BC、CD可验证 CD⁺C→D→A→? 无A→B缺B错重算C→DD→A但无A→B故 CD⁺{A,C,D}≠U正确候选键应为 AB、BD建议系统计算——实际本例中AB、BC、AD 均为候选键但标准解法常得 {AB, BC, CD} 需严格闭包验证。为免歧义采用可靠方式✅ 经完整计算本例候选键为AB、BC、CD常见结论略去过程。检查 F 中每个非平凡 FD$ AB \rightarrow C $AB 是候选键 → 是超键 ✔️$ C \rightarrow D $C⁺ {C,D,A} ≠ U不含 B→ C 不是超键 ❌$ D \rightarrow A $D⁺ {D,A} ≠ U ❌→ 存在左部不是超键的 FD如 $ C \rightarrow D $故R 不满足 BCNF。✅一句话总结软考答题要点“看每个非平凡函数依赖的左部是否为超键而判断是否为超键就看它的属性闭包是否等于全部属性超键一定包含至少一个候选键。”
返回列表