第六章关系数据理论

第六章关系数据理论

  • 6.1_问题的提出(略)
  • 6.2_规范化
    • 6.2.1_函数依赖
    • 6.2.2_码
    • 6.2.3_范式
    • 6.2.4_2NF
    • 6.2.5_3NF
    • 6.2.6_BCNF
    • 6.2.7_多值依赖
    • 6.2.8_4NF
    • 6.2.9_规范化小结
  • 6.3_Armstrong公理系统
    • 6.3.1_函数依赖闭包
    • 6.3.2_最小依赖集
    • 6.3.3_转换为3NF的保持函数依赖的分解

6.1_问题的提出(略)

6.2_规范化

6.2.1_函数依赖

1.函数依赖
设R(U)是一个属性集U上的关系模式,X和Y是U的子集。
若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称 “X函数确定Y” 或 “Y函数依赖于X”,记作X→Y


2.平凡函数依赖与非平凡函数依赖

  • 非平凡的函数依赖:如果X→Y,但Y⊄ X,则称X→Y是非平凡的函数依赖
  • 平凡的函数依赖:若X→Y,但Y ⊆ X, 则称X→Y是平凡的函数依赖

3.完全函数依赖与部分函数依赖

  • 在R(U)中,如果X→Y,并且对于X的任何一个真子集X’,都有X’推不出Y, 则称Y对X完全函数依赖,记作X -F-> Y(即缺了属性集合X中的任何一个属性都不能唯一确定Y)
  • 若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作X-P-> Y。

4.传递函数依赖

6.2.2_码

6.2.3_范式

关系数据库中的关系必须满足一定的要求。满足不同程度要求的为不同范式
第一范式(1NF):如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF

6.2.4_2NF

第二范式(2NF):若R∈1NF,且每一个非主属性完全函数依赖于码,则R∈2NF。

6.2.5_3NF

第三范式(3NF):关系模式R<U,F> 中若不存在这样的码X、属性组Y及非主属性Z(Z  Y), 使得X→Y,Y→Z成立, Y → X,则称R<U,F> ∈ 3NF。(若R∈3NF,则每一个非主属性既不部分依赖于码也不传递依赖于码

6.2.6_BCNF

6.2.7_多值依赖

6.2.8_4NF

6.2.9_规范化小结

6.3_Armstrong公理系统

6.3.1_函数依赖闭包

与编译原理的闭包思想一样
在这里插入图片描述

6.3.2_最小依赖集

定义
(1) F中任一函数依赖的右部仅含有一个属性
(2) F中不存在这样的函数依赖X→A,使得F与F-{X→A}等价。(函数依赖冗余
(3) F中不存在这样的函数依赖X→A, X有真子集Z使得F-{X→A}∪{Z→A}与F等价。 (左部属性冗余


求解方法:(分别对应定义中的三个条件)
(1)逐一检查F中各函数依赖FDi:X→Y,若Y=A1A2 …Ak,k > 2,则用 { X→Aj |j=1,2,…, k} 来取代X→Y。
(2)逐一检查F中各函数依赖FDi:X→A,令G=F-{X→A}, 若A∈XG+, 则从F中去掉此函数依赖
(3)逐一取出F中各函数依赖FDi:X→A,设X=B1B2…Bm,逐一考查Bi (i=l,2,…,m),若A ∈(X-Bi )F+ , 则以X-Bi 取代X。

在这里插入图片描述

6.3.3_转换为3NF的保持函数依赖的分解

【例】 关系模型R<U,F>,U={A,B,C,D,E},F={A→BC,ABD→CE,E→D}

算法一:将关系R转化3NF的保持函数依赖的分解

第一步:首先计算处F的最小函数依赖集,得到F‘={A→BC,AD→E,E→D}。

第二步:观察U中是否有属性不再F’中的出现,如果有,则这个属性组成一对关系R,并在原来的U中删除这些属性。而例子中U的属性都出现在F中,则可以跳过这一步。

第三步:对F‘中的函数依赖,把左边的相同分为一组,一组中出现的所有属性为一个关系。如F={A→B,A→C,……},左边都为A的分为一组,得出项的所有属性组为也给关系R{A,B,C,…}例题中左边都不相同,所以一个函数依赖组为一个关系得到转化为3NF的保持依赖分解1{A,B,C},R2{A,D,E},R3{E,D}。


算法二:将关系R转化为3NF的既有无损连接有保持函数依赖的分解

第一步:先将R转化为3NF的保持函数依赖的分解,由算法一的出R1{A,B,C},R2{A,D,E},R3{E,D}。

第二步:求出F的候选码(候选码求解算法)得出候选码X为AD和AE。

第三步:将候选码单独组成关系得R4{A,D}和R5{A,E},然后与保持函数依赖后得分解取并集。得R1{A,B,C},R2{A,D,E},R3{E,D},R4{A,D},R5{A,E}。。、

第四步:观察新组成得分解模式中,是否存在包含关系,有责去掉被包含得。如R3{E,D},R4{A,D},R5{A,E}都包含于R2{A,D,E},则删除,最终得到转化为3NF的既有无损链接有保持函数依赖的分解R1{A,B,C},R2{A,D,E}。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/545280.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle数据字典

--用户信息 select * from dba_users; --角色信息 select * from dba_roles; --权限信息 select * from dba_role_privs;--方案(Schema)是数据库对象的集合&#xff0c;每个用户都对应一个方案。用户是各种对象的所有者&#xff0c; --方案是对象的组织形式。 --用户与方案是一…

Github上的热门iOS开源项目:AFNetworking、MagicalRecord、BlocksKit以及XVim

1. AFNetworking AFNetworking是一个非常受欢迎的轻量级的iOS、Mac OS X网络通信类库。它建立在NSURLConnection、NSOperation以及其技术的基础上&#xff0c;有着精心设计的模块结构和功能丰富的API&#xff0c;让很多网络通信功能的实现变得十分简单。 附件&#xff1a;/c…

队列实现栈的3种方法,全都击败了100%的用户!

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;本文已收录至 Github《小白学算法》系列&#xff1a;https://github.com/vipstone/algorith之前我们讲过《用两个栈实现一个…

Java类类getConstructor()方法及示例

类的类getConstructor()方法 (Class class getConstructor() method) getConstructor() method is available in java.lang package. getConstructor()方法在java.lang包中可用。 getConstructor() method is used to return a Constructor object that reflects the given pub…

where、having、group by、order by、count的使用注意

where、having、group by、order by、count的使用注意1_where、having、group by、order by的顺序2_group by的作用3_where和group by的组合4_group by和having的组合5_where、having、group by的组合使用6_count与group by的组合使用1_where、having、group by、order by的顺序…

Oracle备份还原

Oracle有两类备份方式&#xff1a; &#xff08;1&#xff09;物理备份&#xff1a;是将实际组成数据库的操作系统文件从一处拷贝到另一处的备份过程&#xff0c;通常是从磁盘到磁带。物理备份又分为冷备份、热备份&#xff1b; &#xff08;2&#xff09;逻辑备份&#xff1…

Eclipse快捷键-方便查找

【Ct rlT】 搜索当前接口的实现类 1. 【ALT /】 此快捷键为用户编辑的好帮手&#xff0c;能为用户提供内容的辅助&#xff0c;不要为记不全方法和属性名称犯愁&#xff0c;当记不全类、方法和属性的名字时&#xff0c;多体验一下【ALT /】快捷键带来的好处吧。 2. 【Ct rlO】…

很实用的21个SQL小技巧!

前言每一个好习惯都是一笔财富&#xff0c;本文基于MySQL&#xff0c;分SQL后悔药&#xff0c; SQL性能优化&#xff0c;SQL规范优雅三个方向&#xff0c;分享写SQL的21个好习惯&#xff0c;谢谢阅读&#xff0c;加油哈~1. 写完SQL先explain查看执行计划&#xff08;SQL性能优化…

Java ByteArrayOutputStream size()方法与示例

ByteArrayOutputStream类size()方法 (ByteArrayOutputStream Class size() method) size() method is available in java.io package. size()方法在java.io包中可用。 size() method is used to return the current size of the buffer exists. size()方法用于返回缓冲区当前存…

Oracle备份文件名获取系统时间的做法(windows)

在对数据库进行备份时&#xff0c;用数据泵的方法&#xff0c;需要执行一段代码&#xff1a; --建目录 create directory dir as d:\bak;--给用户授权使用目录 grant read,write on directory dir to scott;--在cmd中输入以下代码 expdp scott/tigerXE directorydir dumpfileab…

java getmonth_Java LocalDateTime类| 带示例的getMonth()方法

java getmonthLocalDateTime类getMonth()方法 (LocalDateTime Class getMonth() method) getMonth() method is available in java.time package. getMonth()方法在java.time包中可用。 getMonth() method is used to get the field value month-of-year based on the enum Mon…

阿里最喜欢问的多线程顺序打印的5种解法!

Keeper导读大家在换工作面试中&#xff0c;除了一些常规算法题&#xff0c;还会遇到各种需要手写的题目&#xff0c;所以打算总结出来&#xff0c;给大家个参考。全文 2929 字&#xff0c;剩下的是代码&#xff0c;P6 及以下阅读只需要 8 分钟&#xff0c;高 P 请直接关闭第一篇…

CSS入门

CSS入门1_CSS概要1.1_CSS引入方式2_CSS选择器3_字体样式3.1_字体属性3.2_字体类型&#xff1a;font-family3.3_字体大小&#xff1a;font-size3.4_字体粗细&#xff1a;font-weight3.5_字体颜色&#xff1a;color3.6_总结4_文本样式4.1_文本样式属性4.2_首行缩进&#xff1a;te…

Oracle笔记:数据库启动的三个阶段

数据库的启动可分为三个阶段&#xff1a;1、startup nomount -- 启动实例&#xff0c;不加载数据库 nomount&#xff1a;在这一阶段&#xff0c;只需要读取initSID.ora文件&#xff0c;启动数据库实例&#xff0c;创建后台进程。在initSID.ora文件中&#xff0c;可以定位…

Java LocalDate类| lengthOfYear()方法和示例

LocalDate类lengthOfYear()方法 (LocalDate Class lengthOfYear() method) lengthOfYear() method is available in java.time package. lengthOfYear()方法在java.time包中可用。 lengthOfYear() method is used to get the length of the year represented by this LocalDate…

23张图!万字详解「链表」,从小白到大佬!

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;链表和数组是数据类型中两个重要又常用的基础数据类型。数组是连续存储在内存中的数据结构&#xff0c;因此它的优势是可以通…

何为“秒传”

写在前面 最近一直在弄文件传输的组件&#xff0c;在讨论组里面&#xff0c;有同事提到“秒传”的功能。在目前的通信软件中也有网盘的功能&#xff0c;就从网上搜了一下&#xff0c;这里对“秒传”的实现思路做一下总结&#xff0c;在之后会写一个小的demo实现一下。没有其他&…

JavaScript入门

JavaScript入门1_语法基础1.1_变量1.2_数据类型1.3_运算符1.4_类型转换1.5_注释跟c一样2_流程控制语句3_函数3.1_没有返回值的函数3.2_有返回值的函数4_对象4.1_对象简介4.2_字符串对象4.3_数组对象4.4_时间对象4.5_数学对象简介5_DOM基础5.1_DOM是什么5.2_节点类型5.3_获取元素…

oracle 序列的概念与使用步骤

转载自&#xff1a;http://www.worlduc.com/blog2012.aspx?bid20342458 一、概念 1、 序列: 是oacle提供的用于产生一系列唯一数字的数据库对象。主要用于提供主键值。 2、 创建序列&#xff1a; 创建序列的语法 CREATE SEQUENCE sequence //创建序列名称 [INCREMENT BY n]…

数组转List的3种方法和使用对比!

作者 | 大脑补丁来源 | blog.csdn.net/x541211190/article/details/79597236前言&#xff1a;本文介绍Java中数组转为List三种情况的优劣对比&#xff0c;以及应用场景的对比&#xff0c;以及程序员常犯的类型转换错误原因解析。一.最常见方式&#xff08;未必最佳&#xff09;…