3NF的无损连接和保持函数依赖的分解、BCNF的无损连接的分解
首先,需要了解3NF、BCNF范式的要求。
3NF:不存在非主属性对码的传递函数依赖或部分函数依赖。
如AB-C,A->C 码为(A,B),A,B是主属性,C是非主属性,C部分函数依赖于码,即不满足3NF
BCNF:每个决定因素都包含码(相比于3NF,优点是加上了对主属性的限制)
另一种说法:①主属性完全函数依赖于不含它的码
②没有任何属性完全函数依赖于非码的任何一组属性
③所有非主属性对每一个码都是完全函数依赖
在分解前应掌握求函数依赖集最小覆盖的方法。(见例一)
下面看例子
例一:设关系模式R(A,B,C,D,E)上的函数依赖集F是{A->BC,ABD->CE,E->D}
1:计算F的最小覆盖。
首先将右部不唯一的依赖分解。得到{A->B,A->C,ABD->C,ABD->E,E->D}
然后对每一个依赖判断 :对A->B,令G=F-{A->B},查看B是否属于A关于G的闭包。即A是否能从G推导出B。经推,不能。所以,保留A->B。
同理 A->C 保留;ABD->C 删除(因为A->C);ABD->E 保留;E->D 保留
第二步,对左部不唯一的依赖进行判断:对ABD->E,依次去掉A/B/D,查看(ABD-A/B/D)关于F的闭包是否包含E,是则用其取代原依赖。经推,发现AD->E满足条件。
所以,综上所述。F的最小覆盖为{A->B,A->C,AD->E,E->D}
2:直接写出R的所有关键字。
易知,码为(A,D) (A,E)
3:直接将R分解到3NF,且满足无损连接性和依赖保持性。
对F的最小覆盖进行处理:首先,按左部相同原则分组 A->B,A->C为R1({ABC},{A->B,A->C})
AD->E为R2({A,D},{AD->E})
E->D为R3({E,D},{E->D})
然后,将具有包含关系的元组进行合并 R2包含R3,所以将R2,R3合并为新的R2({A,D,E},{AD->E,E->D})
最后,判断分解后的关系模式中是否含有码,若含有则为无损连接且保持依赖的3NF
否则,则是保持依赖但不是无损连接的3NF,此时需要新建一个关系模式,将码放入其中(若此题不含,则加R3({A,D},{∅}))。
该例中,R2含有码,所以满足题意。
4:上述分解是否满足BCNF?若不满足,将其分解到满足BCNF。
对于上述分解,R2中E->D,E为决定因素,不含码,所以不为BCNF(另一种理解方式,码为AD,AE,主属性D部分函数依赖于不含它的码(A,E))
所以对R2分解,使ADE分为 1:ED, 2:ADE-D 即 AE
所以有R2({A,E},{A->E}) ,R3({E,D},{E->D})
最终分解为R1({ABC},{A->B,A->C}),R2({A,E},{A->E}) ,R3({E,D},{E->D})
如有错误,欢迎指正。
3NF的无损连接和保持函数依赖的分解、BCNF的无损连接的分解的更多相关文章
- 数据库求闭包,求最小函数依赖集,求候选码,判断模式分解是否为无损连接,3NF,BCNF
1.说白话一点:闭包就是由一个属性直接或间接推导出的所有属性的集合. 例(1): 设有关系模式R(U,F),其中U={A,B,C,D,E,I},F={A→D,AB→E,BI→E,CD→I,E→C} ...
- 1NF | 2NF | 3NF的区分以及什么是函数依赖、部分函数依赖、值传递依赖(最详细的讲解1NF、2NF、3NF的关系)
1NF | 2NF | 3NF的区分以及什么是函数依赖.部分函数依赖.值传递依赖 符合3NF一定符合2NF.一定符合1IF 简单区分.2NF不存在部分函数依赖,3NF不存在传递函数依赖 第一范式1NF ...
- 安卓Socket连接实现连接实现发送接收数据,openwrt wifi转串口连接单片机实现控制
安卓Socket连接实现连接实现发送接收数据,openwrt wifi转串口连接单片机实现控制 socket 连接采用流的方式进行发送接收数据,采用thread线程的方式. 什么是线程? 详细代码介 ...
- 客户端一个http连接包含两个方向,一个是这个http连接的输入,另一个是这个http连接的输出。
1.客户端一个http连接包含两个方向,一个是这个http连接的输入,另一个是这个http连接的输出. 利用httpclient进行ip地址和端口号连接后,http的输出端作为http请求参数设置.h ...
- SVN 无法连接主机:由于目标计算机积极拒绝,无法连接
问题:使用追溯功能时因为时间太长,所以强行关闭了SVN;当再次连接的时候就发现不能连接到SVN了,错误消息: 无法连接主机:由于目标计算机积极拒绝,无法连接 解决:重启一下服务器的SVN 服务就可以了
- 连接字符串中Min Pool Size的理解是错误,超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。
Min Pool Size的理解是错误的 假设我们在一个ASP.NET应用程序的连接字符串中将Min Pool Size设置为30: <add name="cnblogs" ...
- 为什么建立TCP连接需要三次握手,为什么断开TCP连接需要四次握手,TIME_WAIT状态的意义
为什么建立TCP连接需要三次握手? 原因:为了应对网络中存在的延迟的重复数组的问题 例子: 假设client发起连接的连接请求报文段在网络中没有丢失,而是在某个网络节点长时间滞留了,导致延迟到达ser ...
- MySQL多实例的环境下,服务器端本地连接到指定实例的问题(sock方式连接)
涉及到sock连接的问题. 为了测试MySQL的某些个特性,在一个机器上安装了多个MySQL的实例,如下截图,有两个实例,一个端口是8000,一个端口是8001.在使用mysql -uroot -p ...
- System.Data.Entity.Core.EntityException: The underlying provider failed on Open. ---> System.InvalidOperationException: 超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。
2017/8/15 20:55:21 [AgentPayQuery_205506102_1BBBB]系统异常:System.Data.Entity.Core.EntityException: The ...
- 【liunx】使用xshell连接虚拟机上的CentOS 7,使用xhell连接本地虚拟机上的Ubuntu, 获取本地虚拟机中CentOS 7的IP地址,获取本地虚拟机中Ubuntu 的IP地址,Ubuntu开启22端口
注意,如果想用xshell去连接本地虚拟机中的linux系统,需要本地虚拟机中的系统是启动的才能连接!!!!! ============================================ ...
随机推荐
- Flutter的盒子约束
由Expanded widget引发的思考 设计稿如下 布局widget分解 很常见的一种布局方式:Column的子widget中包含ListView @override Widget build(B ...
- python自动化第二课 - python基础2
1.判断奇数偶数 num = input("请输入一个数字,判断是否为偶数:") print(not int(num) % 2) 2.浮点数的高精度计算用Decimal(from ...
- Fortify Audit Workbench 笔记 SQL Injection SQL注入
SQL Injection SQL注入 Abstract 通过不可信来源的输入构建动态 SQL 指令,攻击者就能够修改指令的含义或者执行任意 SQL 命令. Explanation SQL injec ...
- 简单的scrapy命令和中间件
创建爬虫 scrapy genspider 名字 xxx.com 运行爬虫 运行名为usnews的爬虫scrapy crawl usnews运行爬虫文件scrapy runspider quote_ ...
- PDF顯示插件
1. ie瀏覽器適用<object id="pdf_panel" class="pdf-panel" classid="clsid:CA8A97 ...
- JavaScript初学者
学习如逆水行舟,不进则退.要逆流而上,逆战! 学习JavaScript这门语言,作为一个初学者,最重要的就是扎实的基础. 只要有了扎实的功底,在后期的学习中才能来去自如的应对各种逻辑难题 下面我们就来 ...
- 后端程序员必备:书写高质量SQL的30条建议
前言 本文将结合实例demo,阐述30条有关于优化SQL的建议,多数是实际开发中总结出来的,希望对大家有帮助. 1.查询SQL尽量不要使用select *,而是select具体字段. 反例子: sel ...
- I2C的基本概念和协议
概念 I2C总线是由Philips公司开发的一种简单.双向二线制同步串行总线.它只需要两根线即可在连接于总线上的器件之间传送信息. 主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任 ...
- 信号与系统实验序章0——MATLAB基础命令入门
本次开启新的系列,关于用Matlab实现常见信号和函数的生成和变换. 同时如果没有MATLAB基础,那么可以跟着本文一步一步学习Matlab的相关操作,本文旨在记录在信号与系统课程中MATLAB的学习 ...
- Journal of Proteome Research | Global Proteomic Analysis of Lysine Succinylation in Zebrafish (Danio rerio) (解读人:关姣)
文献名:Global Proteomic Analysis of Lysine Succinylation in Zebrafish (Danio rerio)(斑马鱼赖氨酸琥珀酰化的全球蛋白质组学分 ...