数据库函数依赖
admin
2024-03-14 01:29:57
0

目录

  • 数据库函数依赖
    • 属性集的闭包
      • 求解属性集闭包
      • 判断函数依赖是否成立
      • 求解最小依赖集
      • 求解正则覆盖
    • 候选码的应用
      • 候选码的计算
      • 判断范式
    • 参考

数据库函数依赖

在网上看了许多有关数据库函数依赖考题的分析,大都信息不全或者讲不完整,甚至是胡言乱语,看的我也是云里雾里。在浅浅的了解一番之后,决定总结一下有关这方面的做题技巧,为了加深印象也为了应付考试,于是就有了这篇文章。

阅读须知:数据库函数依赖的部分概念非常多,也十分难理解,如果单纯看书那会发现根本看不懂(比如我,书上各式各样的符号解释让人眼花缭乱)。所以本文大都以例子来说明,碰到相关概念再展开定义。

属性集的闭包

令 α\alphaα 是一个属性集,我们将函数依赖集 FFF 下被函数确定的所有属性的集合称为 FFF 下 α\alphaα 的闭包。

求解属性集闭包

书上的算法就不看了,看了也看不懂,直接看题目。

  • 例一:计算属性闭包(BC)+(BC)^+(BC)+

Example:GivenR,R={A,B,C,D,E},F={B→CD,AD→E,B→A}Example:Given \R,R=\{A,B,C,D,E\},F=\{B\rightarrow CD,AD\rightarrow E,B\rightarrow A\} Example:GivenR,R={A,B,C,D,E},F={B→CD,AD→E,B→A}

解:
1.Result{BC}2.Result{ABCD}3.Result{ABCDE}1.Result\{BC\} \\ 2.Result\{ABCD\}\\ 3.Result\{ABCDE\} 1.Result{BC}2.Result{ABCD}3.Result{ABCDE}
很简单,只要根据函数依赖集一步步推到就可以得到,首先是闭包初始状态BCBCBC,接着分别考虑每一个状态,根据依赖 B→CD,B→AB\rightarrow CD,B\rightarrow AB→CD,B→A ,可以将 AAA 和 DDD 加入到闭包中,最后由 AD→EAD\rightarrow EAD→E,将 EEE 也加入到闭包当中。当刚求出的属性闭包与上一个闭包相同时或者已经求出了所有的属性 UUU 时,就停止计算。

  • 例二:计算属性闭包(A)+(A)^+(A)+

Example:GivenR,R={A,B,C,D,E,H},F={A→B,B→DH,A→H,C→E}Example:Given \R,R=\{A,B,C,D,E,H\},F=\{A\rightarrow B,B\rightarrow DH,A\rightarrow H,C\rightarrow E\} Example:GivenR,R={A,B,C,D,E,H},F={A→B,B→DH,A→H,C→E}

有了上面的经验,这个是不是很简单了呢?

解:
1.Result{A}2.Result{ABH}3.Result{ABDH}1.Result\{A\} \\2.Result\{ABH\}\\3.Result\{ABDH\} 1.Result{A}2.Result{ABH}3.Result{ABDH}

判断函数依赖是否成立

直接说定理:如果 YYY 属于 XXX 的属性集闭包,那么依赖 X→YX \rightarrow YX→Y 成立,反之也如此。即 X→Y⇔Y⫅(XF)+X \rightarrow Y \Leftrightarrow Y \subseteqq(X_F)^+X→Y⇔Y⫅(XF​)+

可能还是过于抽象,直接看题。还是上面的例二,问函数依赖 A→DA \rightarrow DA→D 成立吗?

解:

可以求得属性闭包(A)+={A、B、D、H}(A)^+=\{A、B、D、H\}(A)+={A、B、D、H},因为 H⫅(A)+H \subseteqq(A)^+H⫅(A)+,所以此依赖成立。

求解最小依赖集

求解最小依赖集需要用到上述判断依赖集。

还是直接上题目。

  • 例三:取下述依赖集的最小依赖集

Example:GivenR,R={A,B,C,D,E,I},F={A→C,AB→C,C→DI,CD→I,EC→AB,EI→C}Example:Given \R,R=\{A,B,C,D,E,I\},F=\{A\rightarrow C,AB\rightarrow C,C\rightarrow DI,CD\rightarrow I,EC\rightarrow AB,EI\rightarrow C\} Example:GivenR,R={A,B,C,D,E,I},F={A→C,AB→C,C→DI,CD→I,EC→AB,EI→C}

解:

第一步右部化为单属性,经过分解后上述依赖集就变成如下依赖集:
F={A→C,AB→C,C→D,C→I,CD→I,EC→A,EC→B,EI→C}F=\{A\rightarrow C,AB\rightarrow C,C\rightarrow D,C\rightarrow I,CD\rightarrow I,EC\rightarrow A,EC\rightarrow B,EI\rightarrow C\} F={A→C,AB→C,C→D,C→I,CD→I,EC→A,EC→B,EI→C}
第二步判断依赖是否可以去除。把依赖集中的每一个依赖一个个尝试,看把这个依赖去掉后,还能不能导出这个依赖关系,如果能,则依赖多余要去除;如果不能,则保留。如果看能不能导出依赖关系呢?就要用到我们上述判断函数依赖是否成立了,其实就是判断依赖式左边的闭包包不包含右边。

举例,把 A→CA\rightarrow CA→C 去掉(已经去掉了,此依赖就不可用了),就看 AAA 的闭包里还有没有 CCC,再结合之前求解闭包的方法,可以知道 (A)+={A}(A)^+=\{A\}(A)+={A},并没有 CCC,所以此依赖不多余,不可去除。再判断 AB→CAB\rightarrow CAB→C ,可得 (AB)+={A、B、C、D、I}(AB)^+=\{A、B、C、D、I\}(AB)+={A、B、C、D、I},包含 CCC,也就说明没有这个依赖,此依赖也可以得到,所以把它去掉。再继续判断下一个直到最后,需要注意的是,此时 AB→CAB\rightarrow CAB→C 已经去掉,之后的判断过程就不可再用此依赖了。

最后我们得到依赖集:
F={A→C,C→D,CD→I,EC→A,EC→B,EI→C}F=\{A\rightarrow C,C\rightarrow D,CD\rightarrow I,EC\rightarrow A,EC\rightarrow B,EI\rightarrow C\} F={A→C,C→D,CD→I,EC→A,EC→B,EI→C}
第三步判断左部冗余属性。找到依赖式左部属性大于等于2的,然后依次去除一个属性,判断剩余属性的闭包能否推断出依赖式右部,如果能,则说明去除的属性多余,去掉;如果不能,则说明去除的属性有用,保留。

由于A→C,C→DA\rightarrow C,C\rightarrow DA→C,C→D 左部已经是单属性,就不考虑。直接看第三个 CD→ICD\rightarrow ICD→I,首先去掉属性 CCC,计算 (D)+={D}(D)^+=\{D\}(D)+={D},说明没有 CCC 推不出来 III,即 CCC 不可去掉,同理删除 DDD,计算 (C)+={C、D、I}(C)^+=\{C、D、I\}(C)+={C、D、I},说明没有 DDD 也能推出来 III,即 DDD 可去掉。再依次判断接下来的几个,最后得到最小依赖集:
F={A→C,C→D,C→I,EC→A,EC→B,EI→C}F=\{A\rightarrow C,C\rightarrow D,C\rightarrow I,EC\rightarrow A,EC\rightarrow B,EI\rightarrow C\} F={A→C,C→D,C→I,EC→A,EC→B,EI→C}
整个求解过程较为繁琐。需要注意的是第二步和第三步的细微区别。第二步判断依赖是要先把依赖删除,再利用其他的依赖关系看看能不能推出来此依赖,而第三步判断冗余属性时原本的依赖式是全部可用的。

再看一个例子吧。

  • 例四:取下述依赖集的最小依赖集

Example:GivenR,R={A,B,C},F={A→BC,B→C,A→B,AB→C}Example:Given \R,R=\{A,B,C\},F=\{A\rightarrow BC,B\rightarrow C,A\rightarrow B,AB\rightarrow C\} Example:GivenR,R={A,B,C},F={A→BC,B→C,A→B,AB→C}

解:

第一步右部化为单属性,经过分解后上述依赖集就变成如下依赖集:
F={A→B,A→C,B→C,AB→C}F=\{A\rightarrow B,A\rightarrow C,B\rightarrow C,AB\rightarrow C\} F={A→B,A→C,B→C,AB→C}
第二步判断是否有多余依赖式。可以发现式子 A→C,AB→CA\rightarrow C,AB\rightarrow CA→C,AB→C 都是多余的,所以删除。

第三步由于没有左部多属性的式子,所以不用判断,即此依赖集的最小依赖集:
F={A→B,B→C}F=\{A\rightarrow B,B\rightarrow C\} F={A→B,B→C}

求解正则覆盖

其实正则覆盖只是在最小依赖集最后多加了一步合并。因为正则覆盖有定义:

FFF 中不可以存在两个依赖 α1→β1,α2→β2\alpha_1\rightarrow \beta_1,\alpha_2\rightarrow \beta_2α1​→β1​,α2​→β2​,满足 α1=α2\alpha_1=\alpha_2α1​=α2​

  • 例五:求解下列依赖集的正则覆盖

Example:GivenR,R={A,B,C,D,E},F={A→BC,BCD→E,B→D,A→D,E→A}Example:Given \R,R=\{A,B,C,D,E\},F=\{A\rightarrow BC,BCD\rightarrow E,B\rightarrow D,A\rightarrow D,E\rightarrow A\} Example:GivenR,R={A,B,C,D,E},F={A→BC,BCD→E,B→D,A→D,E→A}

解:

前面还是按照求解最小依赖集的方式。

第一步右部化为单属性,经过分解后上述依赖集就变成如下依赖集:
F={A→B,A→C,BCD→E,B→D,A→D,E→A}F=\{A\rightarrow B,A\rightarrow C,BCD\rightarrow E,B\rightarrow D,A\rightarrow D,E\rightarrow A\} F={A→B,A→C,BCD→E,B→D,A→D,E→A}
第二步判断是否有多余依赖式。可以发现式子 A→DA\rightarrow DA→D 是多余的,所以删除。此时依赖集:
F={A→B,A→C,BCD→E,B→D,E→A}F=\{A\rightarrow B,A\rightarrow C,BCD\rightarrow E,B\rightarrow D,E\rightarrow A\} F={A→B,A→C,BCD→E,B→D,E→A}

第三步判断冗余属性,我们只需要判断 BCD→EBCD\rightarrow EBCD→E 即可,可以得到属性 DDD 是多余的,所以去除。得到最小依赖集:
F={A→B,A→C,BC→E,B→D,E→A}F=\{A\rightarrow B,A\rightarrow C,BC\rightarrow E,B\rightarrow D,E\rightarrow A\} F={A→B,A→C,BC→E,B→D,E→A}
根据正则覆盖的定义,需要把 A→B,A→CA\rightarrow B,A\rightarrow CA→B,A→C 合并,最后的正则覆盖:
F={A→BC,BC→E,B→D,E→A}F=\{A\rightarrow BC,BC\rightarrow E,B\rightarrow D,E\rightarrow A\} F={A→BC,BC→E,B→D,E→A}

候选码的应用

候选码的计算

如何快速选出候选码?我总结了一个方法:

  1. 先找入度为0的属性,即从未出现在闭包依赖式右部的属性(做了挺多题的,发现至少都能找到一个)
  2. 判断它的闭包是否为 UUU(即闭包是否包含全属性)
  3. 如果能,此属性就是候选码。如果不能,就继续在此属性上添加属性,知道找到闭包为 UUU 为止(此时说的为止是指以当前找到的候选码长度为标准,意思就是说我找到了一个长度为3的候选码,我要接着判断有没有其他长度为3的也是候选码,全部找完就可以,因为候选码是最小的超码)

还是有点抽象哈,举例子。

  • 例六:求下述依赖集的候选码

Example:GivenR,R={A,B,C,D},F={AB→C,AC→BD}Example:Given \R,R=\{A,B,C,D\},F=\{AB\rightarrow C,AC\rightarrow BD\} Example:GivenR,R={A,B,C,D},F={AB→C,AC→BD}

解:

首先看从未再依赖式右部出现的属性为 AAA,所以先看 (A)+={A}≠U(A)^+=\{A\}\neq U(A)+={A}​=U,所以 AAA 不是候选码,然后逐一添加属性,判断 (AB)+={ABCD}=U(AB)^+=\{ABCD\}= U(AB)+={ABCD}=U,所以 ABABAB 是候选码,接着判断 (AC)+={ABCD}=U(AC)^+=\{ABCD\}= U(AC)+={ABCD}=U,所以 ACACAC 也是候选码,最后 (AD)+={AD}≠U(AD)^+=\{AD\}\neq U(AD)+={AD}​=U,所以 ADADAD 不是候选码。

此时就不用添加属性了,因为已经是长度最小了。所以此依赖集的候选码集合就是 {AB,AC}\{AB,AC\}{AB,AC}

判断范式

1NF、2NF、3NF、BCNF的概念书上都有,不做过多解释了,我自己也看不懂那个杀软定义(

那么要如何判断一个关系模式是几范式呢?

背景

现在给出关系模式和函数依赖(functional dependency,简称FD)集,判断关系模式的所属范式

方法

  1. 求候选码,确定主属性和非主属性(有关主属性以及非主属性,参考候选码、超码等码的概念)。
  2. 判断是否有非平凡FD(依赖式左部不含候选码)
    • 没有,则是BCNF
    • 有非平凡FD
      • 若这些FD的右部都是主属性,则是3NF
      • 若不存在非主属性对码的部分依赖,即任何候选码的任何真子集都不确定非主属性,则是2NF
      • 否则是1NF(判断属性的域是否为原子性,一般都是的…)

概括

抽象,所以看例子

例七:判断下述依赖集是什么范式
Example:GivenR,R={B,C,D,E,G,H},F={BCD→EGH,E→D,G→C}Example:Given \R,R=\{B,C,D,E,G,H\},F=\{BCD\rightarrow EGH,E\rightarrow D,G\rightarrow C\} Example:GivenR,R={B,C,D,E,G,H},F={BCD→EGH,E→D,G→C}
解:

求候选码 BCD、BCE、BDG、BEGBCD、BCE、BDG、BEGBCD、BCE、BDG、BEG,可得主属性 B、C、D、E、GB、C、D、E、GB、C、D、E、G,非主属性 HHH

可得非平凡FD:E→D,G→CE\rightarrow D,G\rightarrow CE→D,G→C,所以不是BCNF

又因为非平凡FD的右边属性都是主属性,所以是3NF

例八:判断下述依赖集是什么范式
Example:GivenR,R={A,B,C,D},F={AB→C,C→D}Example:Given \R,R=\{A,B,C,D\},F=\{AB\rightarrow C,C\rightarrow D\} Example:GivenR,R={A,B,C,D},F={AB→C,C→D}
求候选码 ABABAB,可得主属性 A、BA、BA、B,非主属性 C、DC、DC、D

可得非平凡FD:C→DC\rightarrow DC→D,所以不是BCNF

又因为非平凡FD的右边属性不是主属性,所以不是3NF

接下来判断是否为2NF。根据定义,2NF不存在非主属性对码的部分依赖(关于部份依赖,详见平凡依赖,非平凡依赖,完全依赖,部分依赖,传递依赖,直接依赖的区别 )。所以我们先构造完整依赖,判断依赖函数是否存在冗余属性,如果有就说明不满足不存在部份依赖,不为2NF。

只能对此题。构造非主属性对候选码的完整依赖 AB→C,AB→DAB\rightarrow C,AB\rightarrow DAB→C,AB→D,判断冗余属性(最小依赖集是不是用过呢?),可得两个依赖函数都没有冗余属性,即不存在非主属性对候选码的部份依赖,都是完全依赖,即符合2NF。

参考

求最小依赖集方法

数据库规范化理论大题考点

如何判断范式(1NF、2NF、3NF、BCNF)

相关内容

热门资讯

钱、资源、工厂,深圳“草根”创... 在深圳,一个没有大厂背景的普通创业者,仅靠一个想法,就能快速完成融资、产品测试、量产、产品上市等多个...
中国证监会发布《私募投资基金信... 新华社北京2月27日电(记者刘慧、刘羽佳)中国证监会2月27日发布了《私募投资基金信息披露监督管理办...
原创 津... 今天来给大家聊一下津巴布韦对锂精矿和原矿的新动作。凌晨的美股市场,锂矿龙头Sigma Lithium...
SpaceX传最快3月秘密递交... 来源:21世纪经济报道 21世纪经济报道记者 彭新 2月28日消息,据媒体援引知情人士称,马斯克旗下...
淘宝闪购发布并开源食安治理AI... 上证报中国证券网讯(记者 杨翔菲)餐饮行业食安治理领域再添一枚重磅AI利器。近日,淘宝闪购正式发布专...
原创 济... 鲁网2月28日讯为持续优化营商环境,精准掌握辖区企业复工复产情况与发展需求,2月28日,济南市莱芜区...
原创 9... 桃李满天下,是面包的梦想。 作者 | 方璐 于婞 编辑丨于婞 来源 | 野马财经 近日,桃李面包(6...
港股IPO结构大变迁,粤企募资... 来源:21世纪经济报道 南方财经记者 王达毓 广州报道 2025年港股火力全开,港交所业绩再创新高。...
减肥人群,迎来好消息! 随着减重药巨头诺和诺德重磅GLP-1类药物司美格鲁肽在中国的核心分子专利即将于3月到期,一大批中国本...
原创 特... 今天来给大家分析一下,为何美国加税,却将中国排除在外。当地时间2月24日,特朗普在国会发表了长达10...
原创 5... 江苏话爆笑科普:5角硬币里真有黄金?别再傻乎乎囤啦! 最近啊,不管是小区楼下张阿姨、李伯伯拉家常,...
电动平车出口优选山东金通,多类... 在全球工业物流设备领域,电动平车作为短途运输的核心工具,其性能与稳定性直接影响生产效率。山东金通起重...
张精科获批出任杭州银行行长 北京商报讯(记者 孟凡霞 周义力)2月28日,国家金融监督管理总局浙江监管局发布《关于张精科杭州银行...
远期售汇业务外汇风险准备金率下... 本报讯(记者 潘福达)昨天,中国人民银行发布消息称,为促进外汇市场发展,支持企业管理好汇率风险,中国...
节后“舌尖经济”热度不减 春菜... 央视网消息:随着气温逐渐升高,多地的春菜陆续上市,在江苏、上海、广西等地的市场上,具有本地特色的春菜...
老铺黄金开年首轮涨价超20%,... 老铺黄金今日涨价,记者根据目前在售的产品进行不完全统计,老铺2026年开年首轮调价幅度约为20%-3...
为何还有人能靠茅台赚钱?因为他... 这个世界出BUG了 李凯,小程序“易茅时价”的创始人,最近一年,他的营收上涨了40%,根据经验,他...
年内首现两家期货公司被罚停开新... 来源:格隆汇APP 格隆汇2月28日|在监管力度加大的背景下,暂停新开业务的处罚在期货行业近期披露的...
伊朗局势演变会如何影响美股、黄... 来源:财联社 最近几周,美伊紧张局势的加剧,再次促使交易员根据风险情绪和波动性来勾勒潜在的地区事态...
童鞋店必看!低成本获客不烧钱,... 做童鞋店的宝子们,是不是都有同一个痛点?想靠小红书获客,却要么砸钱投流没效果,要么自己瞎发笔记没人看...