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

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

在关系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范式,因为较复杂,我会另外写一篇文章记录,敬请关注一下下💖💖💖

目录
相关文章
|
人工智能 搜索推荐 安全
GPT Prompt编写的艺术:如何提高AI模型的表现力
GPT Prompt编写的艺术:如何提高AI模型的表现力
614 0
|
机器学习/深度学习 资源调度 算法
【机器学习基础】对数几率回归(logistic回归)
【机器学习基础】对数几率回归(logistic回归)
979 0
|
Java 关系型数据库 MySQL
【实训项目】基于JavaWeb的图书销售购物系统
【实训项目】基于JavaWeb的图书销售购物系统
322 0
|
存储 分布式计算 Hadoop
HDFS 修改副本数&fsck命令
HDFS 修改副本数&fsck命令
1112 0
|
3月前
|
监控 Linux
Linux系统监控报告CPU软锁定问题(soft lockup)诊断方法
以上方法结合起来使用将大大提高解决此类问题效率与成功率。实际操作过程需谨慎考虑当前环境与场景特点选择合适方法,并且要注意数据备份与恢复计划防止误操作造成不可挽回损失。
536 13
|
数据库
7.4关系数据库设计基础知识
7.4关系数据库设计基础知识
|
存储 人机交互 数据库
如何数据库设计?
本文介绍了数据库设计的四种方法和基本步骤。直观设计法依赖设计者经验,规范设计法(如新奥尔良法)遵循软件工程原理,分为需求分析、概念设计、逻辑设计和物理设计四个阶段。计算机辅助设计法借助软件工具,自动化设计法则通过人机会话自动生成数据库。设计步骤包括需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施和运行维护。需求分析是关键,概念结构设计是基础,逻辑和物理设计涉及数据模型转换和存储优化,而运行维护是持续改进的过程。
705 0
如何数据库设计?
|
数据安全/隐私保护 算法 安全
数据加密有哪些方法?
【6月更文挑战第2天】数据加密有哪些方法?
1226 3
|
缓存 算法 安全
深入理解操作系统内存管理:分页系统的优势与挑战
【2月更文挑战第30天】 在现代操作系统中,内存管理是核心功能之一,它负责将有限的物理内存资源分配给多个并发运行的进程。分页系统作为内存管理的一种流行技术,其通过虚拟到物理地址的映射提供了程序的逻辑地址空间,并允许更高效的内存分配和保护。本文旨在探讨分页系统的关键优势,包括其如何提升内存利用率、实现内存保护以及支持多任务处理。同时,我们也将分析分页机制带来的挑战,诸如页面置换算法的效率问题、页表管理和TLB(Translation Lookaside Buffer)的维护等。
|
运维 关系型数据库 MySQL
"MySQL运维精髓:深入解析数据库及表的高效创建、管理、优化与备份恢复策略"
【8月更文挑战第9天】MySQL是最流行的开源数据库之一,其运维对数据安全与性能至关重要。本文通过最佳实践介绍数据库及表的创建、管理与优化,包括示例代码。涵盖创建/删除数据库、表结构定义/调整、索引优化和查询分析,以及数据备份与恢复等关键操作,助您高效管理MySQL,确保数据完整性和系统稳定运行。
895 0

热门文章

最新文章