数据库复习(四)

标签: sql

函数依赖

设有关系模式R(U),X和Y是属性集U的子集,函数依赖(Functional Dependency,简记为FD)
是形为X→Y的一个命题,只要r是R的当前关系,对r中任意两个元组t和s,都有t[X]=s[X]蕴涵t[Y]=s[Y],
那么称FD  X→Y在关系模式R (U)中成立。 X→Y读作“X函数决定Y”,或者“Y函数依赖于X”。

FD的逻辑蕴涵

定义4.2  设F是在关系模式R上成立的函数依赖的集合,X→Y是一个函数依赖。
如果对于R的每个满足F的关系r也满足X→Y,那么称F逻辑蕴涵X→Y,记为F ⊨X→Y。

定义4.3  设F是函数依赖集,被F逻辑蕴涵的函数依赖全体构成的集合,
称为函数依赖集F的闭包(Closure),记为F+。即:
                   F+={X→Y | F⊨X→Y }。

FD的推理规则

图片1
在这里插入图片描述

属性集的闭包

在这里插入图片描述

FD推理规则的完备性

推理规则的正确性是指“从FD集F使用推理规则集推出的FD必定在F+中”,
完备性是指“F+中的FD都能从F集使用推理规则集导出”。
也就是正确性保证了推出的所有FD是正确的,完备性保证了可以推出所有被蕴涵的FD。
这就保证了推导的有效性和可靠性。
定理4.5  FD推理规则{A1,A2,A3}是完备的。

FD等价

  如果关系模式R(U)上的两个函数依赖集F和G,有F+=G+,
  则称F和G是等价的函数依赖集。

FD集的最小依赖集

设F是属性集U上的FD集。如果Fmin是F的一个最小依赖集,
那么Fmin应满足下列四个条件:
⑴ F+min =F+;
⑵ 每个FD的右边都是单属性;
⑶ Fmin中没有冗余的FD;
   (即F中不存在这样的函数依赖X→Y,使得F与F-{X→Y }等价)
⑷ 每个FD的左边没有冗余的属性。
   (即F中不存在这样的函数依赖X→Y,X有真子集W,使得
F-{ X→Y}∪{ W→Y }与F等价)

关系模式的分解特性

模式分解问题

在这里插入图片描述
在这里插入图片描述

无损分解的测试方法

在这里插入图片描述
在这里插入图片描述

保持函数依赖的分解

在这里插入图片描述
注:无损分解与保持函数依赖的分解两个特性之间没有必然的联系

第一范式(1NF)

定义4.16  如果关系模式R的每个关系r的属性值都是不可分的原子值,
那么称R是第一范式(first Normal Form,简记为1NF)的模式。
1NF是关系模式应具备的最起码的条件,满足1NF的关系称为规范化的关系
否则称为非规范化的关系。关系数据库研究的关系都是规范化的关系。

第二范式(2NF)

定义4.17  对于FD W→A,如果存在X⊂W有X→A成立,那么称W→A是局部依赖(A局部依赖于W);
否则称W→A是完全依赖(也称为“左部不可约依赖” )
定义4.18  如果A是关系模式R的候选键中属性,那么称A是R的主属性;否则称A是R的非主属性。
定义4.19  如果关系模式R是1NF,且每个非主属性完全函数依赖于候选键,
那么称R是第二范式(2NF)的模式。
如果数据库模式中每个关系模式都是2NF,则称数据库模式为2NF的数据库模式。
算法4.4  分解成2NF模式集的算法
设关系模式R(U),主键是W,R上还存在FD X→Z,并且Z是非主属性和X是W的子集,
那么W→Z就是一个局部依赖。此时应把R分解成两个模式:
R1(XZ),主键是X;
R2(Y),其中Y=U-Z,主键仍是W,外键是X(REFERENCES  R1)。
利用外键和主键的连接可以从R1和R2重新得到R。
如果R1和R2还不是2NF,则重复上述过程,一直到数据库模式中每一个关系模式都是2NF为止。 

第三范式(3NF)

定义4.20  如果X→Y,Y→A,且Y↛X和A∉ Y,那么称X→A是传递依赖(A传递依赖于X)。
定义4.21   如果关系模式R是1NF,且每个非主属性都不传递依赖于R的候选键,
那么称R是第三范式(3NF)的模式。如果数据库模式中每个关系模式都是3NF,
则称其为3NF的数据库模式 。
算法4.5  分解成3NF模式集的算法
设关系模式R(U),主键是W,R上还存在FD X→Z。
并且Z是非主属性,Z不是X的子集,X不是候选键,这样W→Z就是一个传递依赖。
此时应把R分解成两个模式:
R1(XZ),主键是X;
R2(Y),其中Y=U-Z,主键仍是W,外键是X(REFERENCES  R1)。
利用外键和主键相匹配机制,R1和R2通过联接可以重新得到R。
如果R1和R2还不是3NF,则重复上述过程,一直到数据库模式中每一个关系模式都是3NF为止。 
定理4.8  如果R是3NF模式,那么R也是2NF模式。
证明:只要证明其逆否命题成立即可,即模式中局部依赖的存在蕴涵着传递依赖即可。
设A是R的一个非主属性,K是R的一个候选键,且K→A是一个局部依赖。那么R中必存在某个K’⊂ K,
有K’→A成立。由于A是非主属性,因此A∩KK’=φ。由K’⊂ K,可知 K’→K,但K→K’成立。
因而从K→K’ 和K’→A可知K→A是一个传递依赖。

局部依赖和传递依赖是模式产生冗余和异常的两个重要原因。

BCNF

定义4.23  如果关系模式R是1NF,且每个属性都不传递依赖于R的候选键,那么称R是BCNF的模式。
如果数据库模式中每个关系模式都是BCNF,则称为BCNF的数据库模式。
定理4.9 如果R是BCNF模式,那么R也是3NF模式。

一个好的模式设计方法应符合三条原则:表达性、分离性和最小冗余性。 
表达性是指数据等价和语义等价问题,分别用无损分解和保持函数依赖来衡量。
分离性是将间接有联系的属性放在不同的表中。
最小冗余性是指分解后的模式个数和模式中的属性总数尽可能最小。

参考博客

数据库复习(一)
数据库复习(二)
数据库复习(三)

版权声明:本文为qq_41146650原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41146650/article/details/93356635

智能推荐

javaScript第一天(1)

01-JavaScript基础 核心知识点 javaScript书写位置 javaScript变量 javaScript数据类型 javaScript数据类型转换 javaScript运算符 今日学习目标 能够定义一个变量并完成变量的赋值 能够说出每一种具体的数据类型 能够数据类型之间的相互转化 能够掌握各种运算符的作用 序言 JavaScript发展历史(js) JavaScript是什么? J...

VS2015错误—严重性代码说明项目文件行 禁止显示状态错误 C4996 fopen(‘fscanf‘、strcmp):This function or variable may be unsafe.

在运行时碰到下列错误: 看错误输出,需要将fopen改为fopen_s; 1.最普通的解决方法,就是使用fopen_s替代, fopen_s()函数的用法:fopen_s(_Outptr_result_maybenull_ FILE ** _File, _In_z_ const char * _Filename, _In_z_ const char * _Mode); fopen()函数的用法:f...

Vuejs——前端学习日记(二)

Vuejs——前端学习日记(二) Vue列表显示 新的指令和属性 后续 通过之前对Vuejs进行简单项目的学习,让我对Vuejs有了初步的认识,接下来是进一步的了解。 Vue列表显示 与之前看到的声明的简单变量message,name相比,数据列表是一个更加复杂的数据,所以在显示方面也会有所不同。在HTML代码中,我们会用v-for指令来显示列表。 如果用之前那样的方法来显...

设计模式之适配器模式

一、适配器模式的背景 在现实生活中,经常出现两个对象因接口不兼容而不能在一起工作的实例,这时需要第三者进行适配。例如,讲中文的人同讲英文的人对话时需要一个翻译,用直流电的笔记本电脑接交流电源时需要一个电源适配器,用计算机访问照相机的 SD 内存卡时需要一个读卡器等。 在软件设计中也可能出现:需要开发的具有某种业务功能的组件在现有的组件库中已经存在,但它们与当前系统的接口规范不兼容,如果重新开发这些...

Spring 4.x遇到的连接数据库拒绝访问

使用了Spring JdbcTemplate连接数据库, 提示 ‘Access denied for user ‘lil’@’192.168.3.104’ (using password: YES)’ , 问题记录与解决 使用了两种方法连接数据库 使用Java读取properties配置文件读取数据库配置(没有使用spring...

猜你喜欢

Day80.html的基本内容 -HTML和CSS

Html和CSS Javase → C/S模式 → Client / Server Javaweb→B/S模式 → Browser / Server 1. 前端BS软件结构 2. 前端的开发流程 3. 网页的组成部分 页面组成: 内容(结构)、表现、行为。 4. HTML简介 5… 创建HTML文件 创建一个web工程(静态的web工程) 在工...

排序算法

(1)冒泡排序 (2)快速排序参考博客(快排原理) 参考博客(形象化过程) 快排原理: 在要排的数(比如数组A)中选择一个中心值key(比如A[0]),通过一趟排序将数组A分成两部分,其中以key为中心,key右边都比key大,key左边的都key小,然后对这两部分分别重复这个过程,直到整个有序。 整个快排的过程就简化为了一趟排序的过程,然后递归调用就行了。 一趟排序的方法: 1,定义i=0,j=...

如何在Windows中获取Mac地址?

Mac Address is a network address used to layer 2 network traffic. The communication is done between network nodes with the mac address. It is important part of computer networking. In this tutorial, w...

使用stm32cubemx快速生成fatfs例程

使用stm32cubemx快速生成fatfs例程 前言 1. cubemx生成过程 1.1 sdio相关配置 1.2 系统时钟树配置 1.3 fatfs配置 1.4 修改工程的栈空间 2. 修改工程代码 2.1 fatfs sd卡读写文件的流程 2.2 具体代码的实现 3.实验现象 前言 本文将介绍如何使用stm32cubemx快速生成一个stm32 sdio 接口的fatfs例程,并实现对sd卡...

史上最简单maven配置与使用

什么是maven maven是用来帮助开发者管理项目所依赖的jar包的一款工具,创建maven工程使得开发不必再自己下载jar包,放入项目文件作为依赖,开发者只需在pom.xml文件里加入依赖的坐标即刻 什么是坐标 关于scope 配置 1、官网下载 2、环境配置 此电脑->属性->高级系统设置->环境变量 新建系统变量,变量名maven_home,变量值maven安装目录 系统...