博客
关于我
属性闭包求解算法——数据库考试复习
阅读量:302 次
发布时间:2019-03-04

本文共 1201 字,大约阅读时间需要 4 分钟。

前言

属性闭包用于判定是否蕴含了某种函数依赖,如判断X→Y是否成立,转换为求X在函数依赖集上的属性闭包中是否包含了Y,如果包含则蕴含该关系,如果不包含则不蕴含此函数依赖。属性闭包是求解极小函数依赖集、候选码、判断是否保持函数依赖性、具有保持函数依赖性的3NF模式分解的关键步骤,务必熟练掌握

属性闭包求解算法

设R(U,F)是一关系模式,其中U是属性集,F为属性集上的函数依赖,X ⊆ U,求X的属性闭包,计为X F + _F^+ F+。算法如下:

① X ⊆ X F + _F^+ F+
② 逐一考察F中的FD,如果存在V→W ∈ \in F,且V中的全部属性都出现在当前的X F + _F^+ F+ 中,将属性组W并入X F + _F^+ F+
当前的 X F + _F^+ F+ 包含全部属性U,或者按(2)重新遍历F而没有对当前 X F + _F^+ F+ 增加任何属性时算法结束

示例

已知关系模式R<U,F>,其中U={A, B, C, D, E},F= {AB→C, B→D, C→E, EC→B, AC→B },求 (AB) F + _F^+ F+ ,(CE) F + _F^+ F+

解:求AB的属性闭包
(AB) F + _F^+ F+ ={AB}
扫描F中的函数依赖AB→C, AB ∈ \in (AB) F + _F^+ F+ ,将C纳入,(AB) F + _F^+ F+={ABC}
扫描F中的函数依赖B→D,B ∈ \in (AB) F + _F^+ F+ ,将D纳入,(AB) F + _F^+ F+={ABCD}
扫描F中的函数依赖C→E,C ∈ \in (AB) F + _F^+ F+ ,将E纳入,(AB) F + _F^+ F+={ABCDE}
(AB) F + _F^+ F+已经包含了所有属性,算法终止;
(AB) F + _F^+ F+={ABCDE}
求CE的属性闭包
(CE) F + _F^+ F+={CE}
扫描F中的函数依赖AB→C, AB ∉ \notin /(CE) F + _F^+ F+ ,(CE) F + _F^+ F+不变
扫描F中的函数依赖B→D,B ∉ \notin /(CE) F + _F^+ F+ ,(CE) F + _F^+ F+不变
扫描F中的函数依赖C→E,C ∈ \in (CE) F + _F^+ F+ ,将E纳入,(CE) F + _F^+ F+={CE}
扫描F中的函数依赖EC→B,EC ∈ \in (CE) F + _F^+ F+ ,将B纳入,(CE) F + _F^+ F+={BCE}
扫描F中的函数依赖 AC→B,AC ∉ \notin /(CE) F + _F^+ F+ ,(CE) F + _F^+ F+不变
扫描完成,算法终止。
(CE) F + _F^+ F+={BCE}

转载地址:http://nraq.baihongyu.com/

你可能感兴趣的文章
Transpose实现数组行列转置的限制
查看>>
golang中interface的一些语法缺陷的改进
查看>>
vue-router路由 学习笔记
查看>>
【数据库】第七章课后题
查看>>
第四章 串、数组和广义表 —— BF算法和KMP算法
查看>>
[选拔赛1]花园(矩阵快速幂),JM的月亮神树(最短路),保护出题人(斜率优化)
查看>>
DLA:一种深度网络特征融合方法
查看>>
leetcode114(二叉树展开为链表)
查看>>
java —— static 关键字
查看>>
在 Python 调试过程中设置不中断的断点 | Linux 中国
查看>>
使用开源可视化工具来理解你的 Python 代码 | Linux 中国
查看>>
硬核观察 | 有人在比特币骗局中损失了 10 个比特币
查看>>
使用 top 命令了解 Fedora 的内存使用情况 | Linux 中国
查看>>
8皇后问题 递归 函数调用是重点
查看>>
1541 +1 *2 ²
查看>>
面试别慌!阿里专家带你从【入门+基础+进阶+项目】攻破SpringBoot
查看>>
【Java面试】30个 Java 集合面试必备的问题和答案
查看>>
华为鸿蒙到底是不是安卓系统套了个壳?
查看>>
window程序设计(1):第一个windows程序
查看>>
21.2.3总结
查看>>