最小函数依赖求解
最小函数依赖解法总结
考研复试要学习数据库,数据库里面好多算法和知识点单看教科书很难理解,然后我就结合网上的博客和课本(数据库系统概论)对一些常考算法做一些总结,欢迎各位批评指正。
最小函数依赖集概念:如果函数依赖集F满足下列条件,则称F为一个极小函数依赖集。
- F中任意函数依赖的右部仅含有一个属性。
- F中不存在这样的函数依赖 ,使得 与 等价。意思就是是不可或缺的。
- 中不存在这样的函数依赖 ,有真子集使得 与等价。意思就是中没有多余的元素。
最小依赖集的求法:
- 逐一检查中各函数依赖 ,若 则用 来去带。通过这个算法我们要中的函数依赖的右属性全部拆为单个属性。经过这一步算法F变为
- 逐一检查中各函数依赖 ,令 ,若 ,则从 中去掉此函数依赖。我们检查 中的每个函数依赖: 从 中去掉此函数依赖得到函数依赖集G然后在求X关于G的属性闭包得到 如果A属于该属性闭包则删掉次函数依赖。经过这一步算法 变为 。注意在求解的过程中F是动态变化的。
- 逐一取出 中各函数依赖,设, 逐一考察 ,若 ,则以 这一步我们要检查中的所有左属性,将左属性化成最简。一定要注意在求解的过程中 是不变的。经过这一步如果 相对于 发生了变化,则转为步骤2在计算一次。
例题:
求最小依赖集。
-
执行第一步将F中的所有函数依赖的右属性拆成单个属性,例如: 拆分后 。
-
执行第二部算法检查每一个函数依赖。
检查 : .然后求B关于G的属性闭包其中不包含D不用删掉
检查 : , 不包含C不删。
检查 : , 不包含E不删。
检查 : , 不包含B不删。
检查 : , 包含B删掉。
检查 : , 包含C删掉。
经过第二步算法的计算 .
上述步骤中F是动态变化的。
-
执行第三步检查每一个函数依赖的左属性:
检查 : 先去掉D即为 不包含C留D,在去掉G,
检查 : 去掉B, 不包含E留B,去掉D, 含E,去掉D。
检查 :去掉A, , 不好含B,留,去掉G, 不包含B,留。
注意第三步算法中的F都是第二步算法计算出来的F,是不变的,最后才去掉的
-
发生了变化,在计算一遍步骤2.
检查: . 不包含D,留
检查 不包含C,留
检查 . 不包含E,留
检查 . 不包含B,留
经过以上3步算法最终可得到最小函数依赖 。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通