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系统,需要本地虚拟机中的系统是启动的才能连接!!!!! ============================================ ...
随机推荐
- Oracle - 坏块修复(一)
一.概述 本文将介绍如何模拟坏块,以及出现坏块该如何修复.实验分为以下几个步骤. 1. 表出现坏块 2. 索引出现坏块 二.环境准备 本实验都是在oracle 11G归档模式下进行. 1. 准备相关表 ...
- RTP SIP win服务端软件 VOIP
RTP Real-time Transport Protocol 实时传输入协议,使用 udp 做为载体. SIP Session Initiation Protocol 会话初始化协议,加入,查询, ...
- 修改js文件,引发的404问题
记录一个bug,本地测不出来,客户后台却404,web测试可参考.(不知道是不是通用的) 先介绍下背景 我们是web产品,存在发布机.管理机.js文件,页面会引用到这些js文件.出于安全考虑,规定js ...
- Flask 请求中间件、错误处理、标签、过滤器、CBV
目录 一.请求中间件 二.请求中间件额外方法(重写源码) 三.请求错误处理 四.请求标签.过滤器 五.CBV写法 基础版 常用版 一.请求中间件 中间件: 1 before_first_request ...
- Html网页链接数据库验证账户密码(新手)
连接代码(其中用到了连接池,不要忘记Jar包.拉入配置文件和工具类): package cn.Wuchuang.Servlet; import org.springframework.jdbc.cor ...
- 推荐两款好用的JS格式化工具
工具一: 直接在Chrome浏览器中,F12,打开Sources栏,找到JS文件,点击下面的花括号即可. 工具二: 使用notepad++ 格式化JS文件. 1.下载 jstool 插件(https: ...
- Postgresql实战经验之alter table 开小差了
Postgresql实战经验之alter table 开小差了 今天需要将一张有数据的表中一个字段varchar 类型转换为timestamp类型,但是pg的alter table 语句却开小差,出现 ...
- 44. 更改oracle字符集编码american_america.zh16gbk 改为 SIMPLIFIED CHINESE_CHINA.ZHS16GBK
注册表NLS_LANG值改为SIMPLIFIED CHINESE_CHINA.ZHS16GBK
- React Native升级
几个月前创建了一个版本为0.60.4的项目,现要更新到最新版本0.61.4. 具体可查看 https://facebook.github.io/react-native/docs/upgrading# ...
- 刷oj之类的题时java Scanner读取太慢解决之道
1.转载自一个 https://www.cpe.ku.ac.th/~jim/java-io.html 2.工具代码 class Reader { static BufferedReader reade ...