**函数依赖(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。✅一句话总结软考答题要点“看每个非平凡函数依赖的左部是否为超键而判断是否为超键就看它的属性闭包是否等于全部属性超键一定包含至少一个候选键。”

相关新闻

会话恢复技术解析:从tmux到codexx,如何找回丢失的命令行工作状态

会话恢复技术解析:从tmux到codexx,如何找回丢失的命令行工作状态

1. 从“你和Kimi聊得太长啦”说起:为什么我们需要会话恢复不知道你有没有遇到过这种情况:正在终端里用某个命令行工具(CLI)调试一个复杂的流程,或者在一个交互式编程环境里写了大半天的代码,突然因为网络波…

2026/8/11 8:17:55 阅读更多 →
海康威视Web3.2无插件监控开发实战:WebSocket+Nginx+H5Player全解析

海康威视Web3.2无插件监控开发实战:WebSocket+Nginx+H5Player全解析

1. 项目概述:为什么我们需要“无插件”方案?如果你做过安防监控相关的Web集成,尤其是和海康威视的设备打交道,那你一定对“插件”这两个字深恶痛绝。早些年,想在网页上预览摄像头实时视频,用户必须下载并安…

2026/8/11 8:17:55 阅读更多 →
手机电池高低温测试原理与寿命预测方法

手机电池高低温测试原理与寿命预测方法

1. 电池寿命测试的行业痛点 手机电池续航能力一直是消费者最关注的性能指标之一。作为从业十年的硬件测试工程师,我见过太多因为电池问题导致的用户体验灾难——明明标注4000mAh容量的电池,用不到半年就出现"跳电"现象;冬季户外使用…

2026/8/11 8:16:55 阅读更多 →

最新新闻

【计算机毕业设计单片机案例】基于 STM32 的物联网基础室内智能窗帘感知终端设计 基于 STM32 单片机的 SG90 舵机模拟窗帘自动控制系统研发(018202)

【计算机毕业设计单片机案例】基于 STM32 的物联网基础室内智能窗帘感知终端设计 基于 STM32 单片机的 SG90 舵机模拟窗帘自动控制系统研发(018202)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/8/11 9:16:17 阅读更多 →
OpenCode 自定义模型终极指南:一份配置文件搞定 GPT 5.6-sol / Claude opus 5/ Gemini 3.6

OpenCode 自定义模型终极指南:一份配置文件搞定 GPT 5.6-sol / Claude opus 5/ Gemini 3.6

很多人 OpenCode 用不好,不是工具不行,而是模型没配对。 本文将带你从 0 到 1,彻底搞懂 OpenCode 如何接入自定义大模型,并给出 实测可用的完整配置方案。适合人群:想在 OpenCode 中接入 自建 / 代理 / 中转模型服务 需…

2026/8/11 9:16:17 阅读更多 →
鼠标CCC认证技术解读:适用标准与测试项目分析

鼠标CCC认证技术解读:适用标准与测试项目分析

一、鼠标在CCC认证目录中的定位 鼠标作为计算机输入设备,属于《强制性产品认证目录》中"信息技术设备"大类下的产品。无论是USB有线鼠标还是2.4G无线鼠标、蓝牙鼠标,只要在中国境内销售,均须通过CCC(中国强制性产品认证…

2026/8/11 9:16:17 阅读更多 →
哈弗M6发动机拆装仿真教学:虚实结合,让技艺自如流转

哈弗M6发动机拆装仿真教学:虚实结合,让技艺自如流转

哈弗M6汽车发动机拆装检修仿真教学软件产品介绍让拆装技艺在虚实间自如流转走进一间职业院校的汽车实训教室,最常见的场景是:一台真实发动机被围得水泄不通,前排学生看得真切,后排学生踮起脚尖也只看到攒动的人头;设备…

2026/8/11 9:16:17 阅读更多 →
企业微信通讯录增量同步排查实践

企业微信通讯录增量同步排查实践

做企业微信接口时,通讯录同步看起来只是定时拉取部门和成员,上线后却容易遇到数据对不上的问题。员工改名、换部门或离职后,本地后台可能仍保留旧信息。每天全量覆盖虽然能修正数据,但数据一多,同步时间会变长&#xf…

2026/8/11 9:16:17 阅读更多 →
手机无信号的时代要终结了?亚马逊砸重金投“太空基站”,拟发射5105颗卫星直连手机!

手机无信号的时代要终结了?亚马逊砸重金投“太空基站”,拟发射5105颗卫星直连手机!

最新内容请微.信搜索公.众.号阅读你有没有遇到过这样的尴尬时刻?去深山老林露营,想发个朋友圈却发现手机显示“无服务”;或者在高速公路上驾车,正好碰到紧急情况,电话却怎么也拨不出去。在地面基站覆盖不到的地方&…

2026/8/11 9:15:16 阅读更多 →

日新闻

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/vi/v…

2026/8/11 0:00:02 阅读更多 →
前后端分离项目中控制台与接口工具数据差异排查指南

前后端分离项目中控制台与接口工具数据差异排查指南

1. 问题现象解析:控制台与Apifox的数据差异 最近在调试一个前后端分离项目时,遇到了一个典型问题:后端服务在本地开发环境控制台能正常输出查询数据,但通过Apifox测试时却返回空结果。这种"控制台有数据,接口工具…

2026/8/11 0:00:03 阅读更多 →
AI编程实战:从Claude Code踩坑到游戏开发入门

AI编程实战:从Claude Code踩坑到游戏开发入门

1. 从“AI能帮我做游戏”到“AI让我重新学编程”最近身边不少朋友,尤其是一些非技术背景、但对游戏开发有浓厚兴趣的朋友,都在问我同一个问题:“听说现在用Claude Code这种AI编程工具,小白也能做游戏了,是真的吗&#…

2026/8/11 0:00:03 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/11 1:08:05 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/11 1:08:05 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/11 1:08:05 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/10 17:07:33 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/11 1:08:06 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/10 17:07:33 阅读更多 →