**函数依赖(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/10/17 12:42:43 阅读更多 →
海康威视Web3.2无插件监控开发实战:WebSocket+Nginx+H5Player全解析

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

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

2026/10/17 12:43:33 阅读更多 →
手机电池高低温测试原理与寿命预测方法

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

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

2026/10/17 12:47:54 阅读更多 →

最新新闻

汇编Debug陷阱:CX高位残留导致循环多跑256次

汇编Debug陷阱:CX高位残留导致循环多跑256次

简介:面向北京交通大学汇编与接口课程学习者的Debug调试实验资料,以leapYear.exe闰年判断程序为完整载体,帮助初学汇编的学生掌握从编译链接到调试排错的关键技能。文档先介绍汇编源文件如何经汇编器、链接器生成可执行文件,再运行…

2026/10/17 20:38:42 阅读更多 →
油猴脚本完全指南:从原理到实战,让你彻底掌控网页

油猴脚本完全指南:从原理到实战,让你彻底掌控网页

"油猴"这名字,说实在的,一开始挺劝退人。我头一回听说的时候也纳闷,一个浏览器扩展工具,怎么起个像宠物小精灵的名字?等真正用明白才反应过来,它跟猴子没什么关系,跟"把网页变成…

2026/10/17 20:38:42 阅读更多 →
自进化世界模型Motus 2:机器人灵巧操作成功率84%的实战解析

自进化世界模型Motus 2:机器人灵巧操作成功率84%的实战解析

早晨六点零三分,实验台边上第三杯咖啡已经凉了,手边的机械臂第八次在拧瓶盖那一步滑脱。这种场面做机器人灵巧操作的人再熟悉不过:逻辑层查了三遍没毛病,仿真里跑了一百遍都成功,一到真实世界就当场翻车。细想一下&…

2026/10/17 20:38:41 阅读更多 →
GraphRAG实战指南:用知识图谱重构检索增强生成,突破传统RAG局限

GraphRAG实战指南:用知识图谱重构检索增强生成,突破传统RAG局限

1. 先唠清楚:RAG 现在的短板到底在哪儿这两年做大模型应用,绕不开 RAG(检索增强生成)。团队里不管做问答机器人、企业知识库还是行业报告分析,第一反应基本都是"文档切块、向量化、top-k 召回、拼 Prompt 喂给模型…

2026/10/17 20:38:41 阅读更多 →
Kafka接入AI推理实战:从架构设计到性能调优

Kafka接入AI推理实战:从架构设计到性能调优

最近我们在生产环境完成了一件让团队都比较兴奋的事:把线上正在跑的 Kafka 集群正式接入了 AI 推理服务。以前 Kafka 在我这儿就是个纯管道工具,负责把订单、日志、用户行为这些消息从上游搬到下游,业务逻辑大多是固定的规则和清洗。现在不一…

2026/10/17 20:38:41 阅读更多 →
AI Agent Harness 多模型服务路由:把 endpoint 改到 TaoToken 的配置与验证

AI Agent Harness 多模型服务路由:把 endpoint 改到 TaoToken 的配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 20:37:41 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →