求最小函数依赖集:求候选键(例题讲解)超详细,易理解

简介: 求最小函数依赖集:求候选键(例题讲解)超详细,易理解

在关系R<U,F>中,U=ABCDEG


F={BG->C,BD->E,DG->C,ADG->BC,AG->B,B->D}


先进行第一大步:

先看右边:


如果有BG->C,G-->C,因为单G就可以推出C了就不需要BG--->C了,可以把BG--->C这个冗余的去掉,根据F中的关系,没有此项,就可以跳过此步。


再看中间:


第一个:BG--->C以外的推导式能否推出BG--->C


G=F-(BG-->C)=BC-->E,DG---->C,ADG-->C,AG-->B,B--->D


注:若BG为x0,则x1表示能从BG推出来的字母...


x0=BG(G+)     x1=BG+D=BGD     x2=BGD+EC=BCDEG   x3=BCDEG   推不出新字母了,停止


我们发现BCDEG中包含C,所以BG---->C冗余


第二个:BD-->E同理


G=F-(BD-->E)=DG-->C,ADG-->C,AG--->B,B--->D


x0=BD(G+)    x1=BD+D=BD    停止


BD中不包含E,不能将此推导式删除

第三个:DG-->C


F=BD→E,DG→C,ADG→C,AG→B,B→D

G=F-(DG→C)=BD→E,ADG-->C,AG→B,B→D

x0=DG(G+)     x1=DG+NULL=x0  停止


DG中不包含C,不能将此推导式删除


以此类推得到以下推导式不能删除:

F=BD→E,DG→C,AG→B,B→D


所以F={BD→E,DG→C,AG→B,B→D}


现在进行第二大步:

再进行逐个细化:


BD--->E


先划掉B,则x0=D    x1=D


再划掉D,则x0=B,x1=BD,x2=BDE,发现包含E,所以删除B-->E


所以F={D--->E,DG--->C,AG-->B,B--->D}


DG-->C同理


先划去D,x0=G,x1=G


再划掉G  x0=D,x1=D


以此类推得到F={D--->E,DG--->C,AG-->B,B--->D}


R1(DE),R2(DGC)R3(AGB)R4(BD)


重复以上第一大步和第二大步,直到无法删除任意一个字母

所以候选码,根据这个F找(重点)

1.如果这个属性只在左端出现了,那么必定是候选码(即候选码至少要包含A,G)


2.如果这个属性只在右端出现了,那么必定不是候选码


3.如果属性在两端出现了,那么是后备(如果主属性A,G足以推出全局,那么候选键就是A,G,如果不能,那么就在后备中找,一个一个试,看能否推出全集)


4.还有两端都不在的字母


具体做法如下


设定左端为L,右端为R,既在左端又在右端为LR,两端都不在N


令X=L  N,求X的闭包


1.如果包含了R的所有属性,那么X为R的唯一候选键。

2.如果没有包含,那么从后备,即两端都有的字母中加入候选键一个一个试

接上面的例子:F={D--->E,DG--->C,AG-->B,B--->D}


x0=L  N=AG    x1=AG+B=AGB    x2=AGB+D=ABGD   x3=ABGD+EC=ABCDEG=U


AG(F+)=U:AG在F上的闭包=全集U,所以AG是候选码


再来几个例题:

例1:

设关系模式R(ABCD)

F={AB-->C,C-->A,C--->D}

L=B,R=D,LR=A,C,N=空集

x0=L  N=B       x1=B,不等于U


先选择A

x0=AB      x1=ABCD,等于U


再选择C


x0=BC     x1=ABCD,等于U


所以候选键是AB,AC

例2:


F={A-->BC,C-->AD}


L=空集,R={B,D}  LR={A,C}


x0=A    x1=ABCD  ,等于U


x0=C    x1=ABCD,等于U


所以候选键是A,C


例3:


关系模式R{A,B,C,D,E,F,G},函数依赖F={A--->BC,BC--->A,BCD--->EF,E---->C},求R的候选键


L={D}    R={F}   LR={A,B,C,E}    N={G}


x0=DG       x1=DG,不等于U


先从LR中选择一个字母:


A      x0=ADG   x1=ADGBCEF=U    所以候选键可以是ADG


B      x0=BDG   x1=BDG,不等于U


C      x0=CDG  x1=CDG,不等于U


E       x0=EDG  x1=EDGC,不等于U


注意A一定要划去,现在选2个


BC    x0=BCDG     x1=BCDGAE=U     所以BCDG是候选键


BE     x0=BEDG    x1=BEDGCAF=U    所以BEDG是候选键


CE      x0=CEDG    x1=CEDG,不等于U


所以候选键是ADG,BCDG,BEDG

补充:这里一定要区分主属性和候选码:


1.候选码的定义:如果关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码;


2.主码的定义:如果一个关系有多个候选码,则选定其中一个为主码;


3.主属性定义:候选码的主属性称为主属性;


4.非主属性定义:不包含在任何候选码中的属性称为非主属性;



补充:

1.将这个属性集的依赖关系规范为三范式:F={D--->E,DG--->C,AG-->B,B--->D}


由上面解析可得AG是候选码


对于范式我这里不细讲,如果不清楚可以看:http://t.csdn.cn/79MwB


U1=AGB(F=AG--->B)


U2=BDE(F=BD-->E,B-->D)


U3=CDG(F=DG---C)


分解成这样,才能既没有部分依赖也没有传递依赖。


2.将属性集规范为第二范式:


F={AB->CD,A->D},按照上述方法得到候选码是AB,那么D就存在部分依赖


那么将R分解为


R1=(AD)  R2=(ABC)


F1={A->D}    F2={A->BC},这样R1和R2符合第二范式


对于如何分解到BCNF范式,因为较复杂,我会另外写一篇文章记录,敬请关注一下下💖💖💖

目录
相关文章
|
12月前
|
存储 传感器 安全
数据不是“铁打的”,从出生到销毁它也有生命周期
数据不是“铁打的”,从出生到销毁它也有生命周期
730 1
|
9月前
|
监控 Linux
Linux系统监控报告CPU软锁定问题(soft lockup)诊断方法
以上方法结合起来使用将大大提高解决此类问题效率与成功率。实际操作过程需谨慎考虑当前环境与场景特点选择合适方法,并且要注意数据备份与恢复计划防止误操作造成不可挽回损失。
1149 13
|
设计模式 IDE 数据可视化
UML中类图的介绍与使用
类图是 UML 中用于展示系统静态结构的重要工具,包括类、接口及其关系。类图有助于系统可视化、团队沟通、发现设计问题、文档化系统和辅助开发工具。类图的三大元素是类、接口和关系,其中关系又细分为关联、聚合、组合、继承、实现和依赖。类图在设计模式学习和实际开发中非常重要,许多现代 IDE 都支持从类图生成代码或从代码生成类图。
|
API 开发者 Python
Pygame Zero(pgzrun)详解(简介、使用方法、坐标系、目录结构、语法参数、安装、实例解释)
Pygame Zero(pgzrun)详解(简介、使用方法、坐标系、目录结构、语法参数、安装、实例解释)
3215 17
|
监控 Java 开发者
什么是 Spring Boot?
什么是 Spring Boot?
4525 6
|
vr&ar
分解为BCNF范式的方法(详细讲解)
分解为BCNF范式的方法(详细讲解)
720 1
业务架构问题之什么是自上而下和自下而上的设计方法
业务架构问题之什么是自上而下和自下而上的设计方法
658 18
|
SQL 数据处理 数据库
|
机器学习/深度学习 人工智能 自然语言处理
深度学习与自然语言处理的融合:重塑语言理解的未来
【8月更文挑战第5天】在自然语言处理(NLP)领域,深度学习技术引发了一场革命,极大提升了语言理解与生成能力。本文探讨深度学习与NLP的融合现状、关键技术如RNN、LSTM、GRU及Transformer模型,预训练语言模型如BERT和GPT的作用,以及迁移学习的应用。这些技术已在机器翻译、文本分类、智能客服等多个场景取得显著成果,并展望未来模型效率、可解释性、跨模态融合及个性化服务等发展趋势。

热门文章

最新文章