首先,需要了解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的无损连接的分解的更多相关文章

  1. 数据库求闭包,求最小函数依赖集,求候选码,判断模式分解是否为无损连接,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} ...

  2. 1NF | 2NF | 3NF的区分以及什么是函数依赖、部分函数依赖、值传递依赖(最详细的讲解1NF、2NF、3NF的关系)

    1NF | 2NF | 3NF的区分以及什么是函数依赖.部分函数依赖.值传递依赖 符合3NF一定符合2NF.一定符合1IF 简单区分.2NF不存在部分函数依赖,3NF不存在传递函数依赖 第一范式1NF ...

  3. 安卓Socket连接实现连接实现发送接收数据,openwrt wifi转串口连接单片机实现控制

    安卓Socket连接实现连接实现发送接收数据,openwrt wifi转串口连接单片机实现控制 socket 连接采用流的方式进行发送接收数据,采用thread线程的方式. 什么是线程?  详细代码介 ...

  4. 客户端一个http连接包含两个方向,一个是这个http连接的输入,另一个是这个http连接的输出。

    1.客户端一个http连接包含两个方向,一个是这个http连接的输入,另一个是这个http连接的输出. 利用httpclient进行ip地址和端口号连接后,http的输出端作为http请求参数设置.h ...

  5. SVN 无法连接主机:由于目标计算机积极拒绝,无法连接

    问题:使用追溯功能时因为时间太长,所以强行关闭了SVN;当再次连接的时候就发现不能连接到SVN了,错误消息: 无法连接主机:由于目标计算机积极拒绝,无法连接 解决:重启一下服务器的SVN 服务就可以了

  6. 连接字符串中Min Pool Size的理解是错误,超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。

    Min Pool Size的理解是错误的 假设我们在一个ASP.NET应用程序的连接字符串中将Min Pool Size设置为30: <add name="cnblogs" ...

  7. 为什么建立TCP连接需要三次握手,为什么断开TCP连接需要四次握手,TIME_WAIT状态的意义

    为什么建立TCP连接需要三次握手? 原因:为了应对网络中存在的延迟的重复数组的问题 例子: 假设client发起连接的连接请求报文段在网络中没有丢失,而是在某个网络节点长时间滞留了,导致延迟到达ser ...

  8. MySQL多实例的环境下,服务器端本地连接到指定实例的问题(sock方式连接)

    涉及到sock连接的问题. 为了测试MySQL的某些个特性,在一个机器上安装了多个MySQL的实例,如下截图,有两个实例,一个端口是8000,一个端口是8001.在使用mysql -uroot -p ...

  9. 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 ...

  10. 【liunx】使用xshell连接虚拟机上的CentOS 7,使用xhell连接本地虚拟机上的Ubuntu, 获取本地虚拟机中CentOS 7的IP地址,获取本地虚拟机中Ubuntu 的IP地址,Ubuntu开启22端口

    注意,如果想用xshell去连接本地虚拟机中的linux系统,需要本地虚拟机中的系统是启动的才能连接!!!!! ============================================ ...

随机推荐

  1. php -v 找不到命令

    [root@localhost htdocs]# php -v -bash: php: command not found export PATH=$PATH:/usr/local/php7/bin ...

  2. BERT实现QA中的问句语义相似度计算

    1. BERT 语义相似度 BERT的全称是Bidirectional Encoder Representation from Transformers,是Google2018年提出的预训练模型,即双 ...

  3. 学习ConcurrentHashMap并发写机制

    1. 前言 上篇文章讲了 Unsafe 类中 CAS 的实现,其实是在为这篇文章打基础.不太熟悉的小伙伴请移步Unsafe 中 CAS 的实现.本篇文章主要基于 OpenJDK8 来做源码解析. 2. ...

  4. 032.核心组件-kube-proxy

    一 kube-proxy原理 1.1 kube-proxy概述 Kubernetes为了支持集群的水平扩展.高可用性,抽象出了Service的概念.Service是对一组Pod的抽象,它会根据访问策略 ...

  5. Serverless与微服务

    Serverless 是一个更大的范畴,Serverless 不只计算,也包括存储.数据库.中间件等各种服务.Serverless = FaaS(函数即服务) + BaaS(后端即服务).其中 Ser ...

  6. js String方法总结

    字符方法(3) charAt(pos: number): string; // 返回特定位置的字符. charCodeAt(index: number): number; // 返回表示给定索引的字符 ...

  7. search(2)- elasticsearch scala终端:elastic4s

    上篇谈到:elasticsearch本身是一个完整的后台系统,对其的操作使用是通过终端api进行的.elasticsearch本身提供了多种编程语言的api,包括java的esjava.而elasti ...

  8. 给 ABP vNext 应用安装私信模块

    在上一节五分钟完成 ABP vNext 通讯录 App 开发 中,我们用完成了通讯录 App 的基础开发. 这本章节,我们会给通讯录 App 安装私信模块,使不同用户能够通过相互发送消息,并接收新私信 ...

  9. 推荐三款好用的JSON格式化工具——JSON-handle & HiJson & JSTool

    工具一:JSON-handle JSON-Handle是一款谷歌浏览器插件. 1.访问http://jsonhandle.sinaapp.com/下载 2.打开Chrome浏览器的扩展程序(访问chr ...

  10. hdu2087kmp模板练习

    题目网址:http://icpc.njust.edu.cn/Problem/Hdu/2087/ 代码: #include<bits/stdc++.h> using namespace st ...