一、候选码

参考链接:1

1.定义:
候选码(超级码)就是可以被选为主码的属性或属性组。当一个关系有N个属性或属性组可以唯一标识时,则说明该关系有N个候选码,可以选定其中一个作为主码。

候选码定义: 设K为关系模式R<U, F>的属性(组),若K→FU,则称K为R的 候选码。
主码:若R<U , F>有多个候选码,则可以从中选定一个作为R的主码。
主属性:包含在任一个候选码中的属性,称作主属性。
非主属性:不包含在任一个候选码中的属性,称作非主属性(或非码属性)。
全码:关系模式的码由全部属性构成。

例:
求出关系模式R<U, F>的所有候选码:
U={ A , B , C , D , E }
F={AB→C, B→D, C→E, EC→B, AC→B }

解: 验证AB是否码, 须证明 AB→FABCDE是否成立?
∵AB→C(已知), 而AB→AB(自反), ∴AB → ABC(合并)
∵B→D(已知), ∴AB→AD(增广), ∴AB → ABCD(合并)
∵C→E(已知), AB→C(已知), ∴AB → E(传递)
于是 AB → ABCDE(合并)

同理可证:AC也是一个候选码

2.方法:
讲解视频;候选码

设关系模式R<U, F>
将R的所有属性分为 L、 R、N和 LR四类,并令X代表L、N两类,Y代表LR类。
L类: 仅出现在F的函数依赖左部的属性;
R类: 仅出现在F的函数依赖右部的属性;
N类: 在F的函数依赖左右两边都不出现的属性;
LR类:在F的函数依赖左右两边都出现的属性 。
求属性集闭包X+,若 X+包含了R的全部属性则X即为R的唯一候选码, 转5;
否则, 在Y中取一属性A,求属性集闭包(XA)+,若(XA)+包含了R的全部属性,则转4;否则,调换一属性反复进行这一过程,直到试完所有Y中的属性。
如果已找出了所有的候选码,则转(5);否则在Y中依次取2个、3个、…属性,求X与它们的属性集闭包,直到其闭包包含R的全部属性。
停止,输出结果。

例1: 设关系模式R(A, B, C, D), 其函数依赖集:
F={D→B, B→D, AD→B, AC→D},求R的所有候选码。
解: L类: A, C
R类:
N类:
LR类: B, D
因为(AC)F+=ACDB,所以AC是R的唯一候选码

**例2:**设关系模式R(A, B, C, D, E, P), 其函数依赖集:
F={A→D, E→D, D→B, BC→D, DC→A},求R的所有候选码。
解: L类: C, E
R类:
N类: P
LR类: A, B, D
因为(CEP)F+=CEPDBA,所以CEP是R的唯一候选码。

例3: 设关系模式R(S, D, I, B, O, Q), 其函数依赖集:
F = { S→D, I→B, B→O, O→Q, Q→I },求R的所有候选码。
解: L类(S); R类(D) ; N类(无) ; LR类(I, B, O, Q)
因为S+=SD, 所以S不是R的候选码;
因为(SI)+=SIDBOQ,所以SI是一个候选码;
因为(SB)+=SBDOQI,所以SB也是一个候选码;
因为(SO)+=SODQIB,所以SO也是一个候选码;
因为(SQ)+=SQDIBO,所以SQ也是一个候选码。

二、最小函数依赖集

视频讲解:最小函数依赖集
参考链接:2
参考链接:3

1.定义:
如果函数依赖集F满足以下三个条件,则称F为最小函数依赖集,记作Fm。
①F中每个函数依赖的右部都是单属性,即右部最简化。
②对于F中任一函数依赖X -> A 和X的真子集X’,(F - (X - A)) ∪ (X’ -> A)
与F都不等价,即左部无多余属性。
③对于F中任一函数依赖X -> A,F - {X -> A}与F都不等价,即无多余函数依赖。

2.方法:
输入:一个函数依赖集F。
输出:F的一个等价的最小函数依赖集Fm。
步骤:
(1)用分解规则,使F中的每个函数依赖的右部仅含单属性。此步为等价分解。
(2)去掉多余的函数依赖。逐一检查上步结果F的各函数依赖X -> A,并将X -> A从F中去掉,然后在剩下的F中去求X+,若A包含于X+,则X -> A多余。依次做下去,直到找不到冗余的函数依赖。此步为等价消依赖。
(3)去掉各依赖左部多余的属性。一个一个地检查左部非单个属性地函数依赖。即XY -> A ,判断Y是否多余,则在分解后地F求X的属性闭包X+,若A包含于X+ ,则Y是多余的。此步为等价消属性。

口诀:
右侧先拆单,依赖依次删。
还原即可删,再拆左非单。

例:
U=(A,B,C,D,E,G) F={BG->C,BD->E,DG->C,ADG->BC,AG->B,B->D},求F最小依赖集。

解:

第一步:右边单一化。

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

第二步:逐个求,在去掉它的F中求闭包,如果包含右边属性,则表示这个函数依赖要去掉。

BG->C:求(BG)+=BCDEG,包含右边属性C,所以去掉。

BD->E:(BD)+=BD,不包含右边E,所以不用去掉。

DG->C:(DG)+=DG,也不用去掉。

ADG->B:(ADG)+=U,包含B,所以去掉。

ADG->C:(ADG)+包含C,去掉。(在这里,求闭包的时候,不能再用前面去掉的函数依赖了,所以如果从后往前判断,可能不用去掉ADG->B,所以最小依赖集不唯一,写出一个即可。)

AG->B:(AG)+=AG,不用去掉。

B->D:(B)+=B,不用去掉。

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

第三步:对左边属性单一化,判断冗余,代替。

BD->E:B->E,求(B)+=BD,包含D,所以D冗余。
D->E,求(D)+=D,所以B不冗余。
所以用B->E代替BD->E。

DG->C:D->C,(D)+=D,所以G不冗余。
G->C,(G)+=G,所以D不冗余。

AG->B:A->B,(A)+=A,所以G不冗余。
G->B,(G)+=G,所以A不冗余。

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

三、3NF分解算法

1.定义:
第三范式(3NF):第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。

2.方法
参考链接:4

步骤:
(1)找出F的一个最小基本集,记为G。
(2)对于G中的每一个FD X→A,将XA作为分解出的某个关系的模式。
(3)如果第2步分解出的关系的模式均不包含R的超键,则增加一个关系,其模式为R的任何一个键。

口诀:
保函依赖分解题,先求最小依赖集。

依赖两侧未出现,分成子集放一边,剩余依赖变子集。

若要连接成无损,再添候选做子集。

例:
已知R(ABCDE), F={A ->D,E->D,D->B,BC->D,DC->A}求保持函数依赖的3NF分解,和具有无损连接性及保持函数依赖的3NF分解

第一步:保函依赖分解题,先求最小依赖集。
先求出R的最小依赖集,可得F={A ->D,E->D,D->B,BC->D,DC->A}

第二步:依赖两侧未出现,分成子集放一边。
首先可以发现没有不出现在两侧的元素不用单独分出一个子集。
“剩余依赖变子集”然后我们将各依赖分别划分为子集得到:{AD} {ED} {DB} {BCD} {DCA},
即为所求保持函数依赖的3NF分解

第三步:若要连接成无损,再添候选做子集。
(1)候选码的求解:所谓候选码即能决定整个关系的,我们通过找未出现在依赖右边的和两侧均未出现的元素即可求得,
(2)可以发现C E未出现在右边,因此候选码为{CE}。故所求具有无损连接性及保持函数依赖的3NF分解为{AD} {ED} {DB} {BCD} {DCA} {CE}

四、判断属于第几范式

讲解视频:第几范式

1NF是指数据库表的每一列都是不可分割的基本数据项,即实体中的某个属性不能有多个值或者不能有重复的属性。

2NF要求属性完全依赖于主键,不能存在仅依赖主关键字一部分的属性。

3NF要求每一个非主属性既不部分依赖于码也不传递依赖于码。

BCNF消除了主属性对候选码的部分和传递函数依赖。

数据库期末考试预习之候选码,最小函数依赖集,3NF分解算法,判断第几范式相关推荐

  1. 数据库期末考试预习之ER图和关系模式

    参考链接:ER图 参考链接:ER转为关系模式 学习视频:哔哩哔哩讲解视频 E-R图 1.定义 E-R图又称实体关系图,是一种提供了实体,属性和联系的方法,用来描述现实世界的概念模型. 2.方法 E-R ...

  2. 【数据库】期末复习:SQL语句、关系代数的运算、范式的定义和判断、求最小函数依赖集、ER图转关系模式

    文章目录 SQL语句 查询select 其他 视图 关系代数的运算 并.差.笛卡尔积.投影和选择 连接 自然连接 笛卡尔积 详细版(如果完全不了解就看这里) 范式的定义和判断 如何求候选码 一些例题 ...

  3. oracle数据库期末上机题,oracle数据库期末考试试题及复习资料

    <oracle数据库期末考试试题及复习资料>由会员分享,可在线阅读,更多相关<oracle数据库期末考试试题及复习资料(16页珍藏版)>请在人人文库网上搜索. 1.oracle ...

  4. 重庆科技学院数理学院mysql的期末考试_数据库期末考试重庆科技学院A.doc

    数据库期末考试重庆科技学院A ★编号:重科院( )考字第( )号 重庆科技学院 考 试 试 卷 2013/2012学年第 2 学期 ( A 卷,共 页 ) 课程名称: 数据库原理及应用 适用专业/年级 ...

  5. SQL语句你会写了吗?一题教你轻松对付数据库期末考试(写SQL语句的分必拿哦)

    现有下列几个表,按题目要求写出相关的SQL语句 第一部分: # 1. 查询所在城市为"北京"的所有工程号和工程名. select JNO,JNAME from j where CI ...

  6. 数据库常考题型(3)——求最小函数依赖集

    视频链接 https://www.bilibili.com/video/BV11F411K749/?spm_id_from=333.788&vd_source=467ab4c3cef3f6c7 ...

  7. 函数依赖集闭包、属性集闭包、超键、候选键和最小函数依赖集的求法。

    目录 关系模式 函数依赖的闭包 属性集闭包 码 求候选键算法 最小函数依赖集 关系模式R(U,D,DOM,F) R:关系名,符号化的元组定义 U:一组属性 D:属性组U中的属性所来自的域 DOM:属性 ...

  8. 关系数据库理论之最小函数依赖集

    文章目录 前言 为什么需要最小函数依赖集 闭包 最小函数依赖集 定义 解释 算法 举例 写在最后 前言 在本文中,会介绍为什么要引入最小函数依赖集,最小函数依赖集是什么,以及如何求最小函数依赖集. 为 ...

  9. 最小函数依赖集的求解过程

    流程 ①先拆右边,假如依赖集F中的右边项包含不止一个属性,那么将这些项都拆为单个项.例如A->BC,拆分为A->B和A->C ②去除冗余依赖项,例如A->C和AB->C, ...

最新文章

  1. ffmpeg 视频剪辑常用命令
  2. MSSQL数据批量插入优化详细
  3. aws ping 不通的解决办法
  4. java string char数组_String在Java中真的是不可变吗?
  5. 给做技术的换一道菜尝尝:一月冲皇冠?凶残级淘宝店主,无法阻挡的爆款名城!...
  6. vue 商城浏览足迹_vue实现用户获取浏览记录功能
  7. l2tp 服务器错误 741
  8. 【Proteus仿真】51单片机+直流电机PWM调速实验
  9. .NET(C#):await返回Task的async方法
  10. linux 环境安装 webdav 服务
  11. c#上位机开发(三)——简易串口发送数据
  12. java使用knn实现mnist_java使用knn实现mnist - 百度学术
  13. Zeppelin的使用
  14. 常微分方程_一阶线性微分方程
  15. 案场渠道稽核管理系统更新记录V1.2
  16. 牛客每日练习----珂朵莉与宇宙,Forever97与寄信,Number
  17. HTML做一个简单漂亮的宠物网页(纯html代码) 带视频 带音乐 带报告
  18. android 三屏手机游戏,大象侠攻略三屏操作手速必须要快
  19. PowerShell 学习笔记:压缩、解压缩文件
  20. ktv无线服务器,KTV,酒店无线wifi上网无线AP服务器

热门文章

  1. 2022-2028全球及中国人体传感器 IC行业研究及十四五规划分析报告
  2. 如何将文件上传到GitHub仓库-操作简述
  3. paloalto防火墙接口使用方法及实例
  4. 2021计算机视觉-包揽所有前沿论文源码 -下半年
  5. VB---Cstr和str/lable和test问题
  6. 华为、中兴对比 [zz]
  7. 问:发电机准同期并列的基本要求和条件是什么?
  8. Seaborn数据可视化,举例剖析
  9. PowerPoint to JPEG convertor
  10. 财富顾问负责什么工作