数据库原理与应用系列_04函数依赖

简介: 在关系数据库系统中,关系模型包括一组关系模式,并且关系之间不是完全孤立的(主外键)。设计一个合适的关系型数据库系统,关键是设计关系型数据库的模式。

一、规范化理论的主要内容



关系数据库系统中,关系模型包括一组关系模式,并且关系之间不是完全孤立的(主外键)。

设计一个合适的关系型数据库系统,关键是设计关系型数据库的模式。

具体包括:


【1】数据库当中应包括多少个关系模式(可以理解为表)。

【2】每一个关系模式应该包括哪些属性(描述对象的特征)。

【3】如何将这些相互关联的关系模式组建成一个完整的数据库 。

关系数据库的规范化理论主要包括三个方面的内容:

【1】函数依赖

【2】范式

【3】模式设计

如果不使用关系型数据库的规范化理论,可能导致以下问题:

【1】数据冗余

【2】插入异常

【3】删除异常

【4】更新异常

e53b8fe634374ee09464116df91b1bfd.png

将所有数据都存在一张大表上面,则叫做泛模式。

泛模式就是存储了所有数据的一张大表。

例如Student关系模式就是一个泛模式:

6ec0e2e5345f452f88f97f5d3b207ef2.png

1d6430d4608e4546a1bbe1777ecdf37d.png

由于泛模式有很多问题,因此我们需要使用函数依赖将泛模式切割成许多小的表。把泛模式合理的分解成若干模式后可以使每个关系模式的结构清晰和简洁。

一个规范的关系模式应该具备以下四个条件:

【1】尽可能少的数据冗余

【2】没有插入异常

【3】没有删除异常

【4】没有更新异常

92070a65b05c48e791682b39dec37e71.png


二、数据依赖



数据依赖:指的是关系模式中的各属性之间相互依赖,相互制约的联系。

数据依赖分为:

【1】函数依赖

【2】多值依赖


函数依赖是最重要的数据依赖。


1、函数依赖


函数依赖分为完全函数依赖,部分函数依赖和传递函数依赖。

  1. 函数依赖(FD)

是关系模式中属性之间的一种逻辑依赖关系。在一个表里面,属性X可以映射到属性Y,也就是说知道了X就能确定Y,称X为决定因素。

一个特定的X决定一个特定的Y(是一对一的关系)

19c52cd1ae8b4e80a2be4265ef03b615.png

例如:

有一个关系模式S(Sno,Sname,Sage)

如果知道了一个学生的学号Sno,那我就能确定他的姓名Sname和年龄Sage。

b6873d08e36b44e1b51e9e22437cc516.png

知道了一个学生的姓名也是可以确定其他属性的,这也是满足函数依赖关系的。(前提示学生的姓名没有重名的情况,否则就不是函数依赖了)


2、完全函数依赖


  1. 完全函数依赖

如果我想知道某位学生的某一门课的成绩Grade,那我必须得同时知道他的学号Sno和课程号Cno。

但如果我只知道一部分信息,比如他的Sno或者Cno可以吗?答案是不行的!此时称Y[Grade]完全依赖于X[Sno,Cno]。

57e85cd20c3d430b8d62fb5858db4395.png

0b62f83ddd8a4340b4503f1ba12d4563.png

3、部分函数依赖


  1. 部分函数依赖

如果我想知道某位学生的姓名Sname,那我知道他的学号Sno就可以了。也就是说Y[Sname]只函数依赖于X[Sno,Cno]中的子集x[Sno],此时称Y部分函数依赖于X。

121db0caabe344fd85ab0b3cce4113c2.png

31527732c217454b9db9ee9b764ce5ac.png01bf41b0a5314a52a3dbc7193c3cd860.png

只有左边是组合的情况下才有可能出现部分函数依赖

0ef16ed2e18d4ff082b1da9b3cd91bf9.png


4、传递函数依赖


传递函数依赖

有一个关系模式S(Sno,Sdept,Mname)

如果我知道了一个学生的学号Sno,那我就能知道他所在的系Sdept。

如果我知道了某一个系Sdept,那么我就能知道这个系的系主任的姓名Mname。

也就是说,我知道了一个学生的学号Sno,其实我就知道了他所在系的系主任的姓名Mname。但这个过程中,他们是不存在直接函数依赖的,我需要通过系名称Sdept作为一个桥梁去把二者联系起来的。

7ec6f79ee6624b40ad96a4bc86cac3d4.png

注意:这里Sdept无法反推出Sno

7919f1deae28436c86b30de9d62d402f.png

仅通过完全函数依赖和部分函数依赖的特性来区分函数依赖的特性是,传递函数依赖可能是一种完全函数依赖,也可能是一种部分函数依赖。


可以通过函数依赖传递过程中是否存在部分函数依赖来进行区分。若函数依赖的传递过程均发生在完全函数依赖上,则产生的传递函数依赖是一种完全函数依赖,否则为部分函数依赖。


5、平凡函数依赖


当属性集Y是属性集X的子集时,必然存在函数依赖X-》Y。这种类型的函数依赖称为平凡函数依赖。


例如:(SNo,SN,Age)唯一确定的时候,它的任意子属性集合(SNo)必然唯一确定。


如果Y不是X的子集,则成X-》Y为非平凡的函数依赖。


若不特别声明,考虑的都是非平凡的函数依赖。

546b8408d6bb414ab155343a79ee4db7.png


定义:设关系模式R(U,F),U是属性的全集,F是由U上的函数依赖所构成的集合,X和Y是U的子集,如果对于R(U)的任意一个可能的关系r,对于X的每一个具体值,Y都有唯一的具体值与之对应,则称X决定Y,或者Y函数依赖于X。


【1】函数依赖是语义范畴的概念


【2】函数依赖不是关系模式R的某个或者某些关系实例的约束条件,而是关系模式R之下一切可能的关系实例都要满足的约束条件。


【3】函数依赖与属性之间的联系类型有关


在一个关系模式当中,如果属性X与Y有1:1联系时,则存在函数依赖X->Y , Y->X

即X<->Y


如果属性X与Y有m : 1的联系时,则只存在函数依赖X->Y


如果属性X与Y有m : n的联系时,则X与Y之间不存在任何的函数依赖


【4】函数依赖与时间无关(因为关系模型是静态的,关系实例是动态的)



6、逻辑蕴含与闭包【期末必考】


  1. 逻辑蕴含

设F是关系模式R(U)中的一个函数依赖集合,X, Y是R的属性子集(指的是投影),如果从F中的函数依赖能够推导出X→Y,则称F逻辑蕴涵X→Y, 或称X→Y是F的逻辑蕴涵。


比如:F含有依赖关系A→B,B→C, 则可推出A→C,所以F逻辑蕴含A→C


闭包

被F逻辑蕴涵的所有函数依赖集合称为F的闭包(Closure),记作 F+。


闭包是由关系模式R直观得到的函数依赖F所推出的所有隐含的或未隐含的(直观的)函数依赖的集合。


示例:设属性集U为XYZW,函数依赖集为{X→Y,Y→Z,W→Y,YZ→W},则:


X+=XYZW


Y+=YZW


(XW)+=XYZW


对于计算闭包,先把自己自身写出来,拿上面的X+来举例:


【1】X→X

【2】X→Y

【3】Y→Z

【4】YZ→W

8ead40d2f0744d41b1ec3c3fc48e1cd9.png

因此X+=XYZW

96e128c64da3474095f48cfa2f6c7f03.png

三、Armstrong公理



Armstrong公理系统设关系模式R<U,F>,其中U为属性集,F是U上的一组函数依赖,那么有如下推理规则:

① A1自反律:若Y⊆X⊆U,则X→Y为F所蕴含;


② A2增广律:若X→Y为F所蕴含,且Z⊆U,则XZ→YZ为F所蕴含;


③ A3传递律:若X→Y,Y→Z为F所蕴含,则X→Z为F所蕴含。


根据上面三条推理规则,又可推出下面三条推理规则:


④ 合并规则:若X→Y,X→Z,则X→YZ为F所蕴含;


⑤ 伪传递规则:若X→Y,WY→Z,则XW→Z为F所蕴含;


⑥ 分解规则:若X→Y,Z⊆Y,则X→Z为F所蕴含。

f140592e43f544b6b838555d6e57e91a.png

例题一: 1、关系模式R(A.B.C.D.E)的函数依赖有AB一C和C.D一E.如果AB和D每个最多有三个不同的取值,则E最多有多少个不同的取值?

解:

根据笛卡尔积,AB共有3*3=9,因此C有9种,D最多三种,因此E最多27种。

例题二:

09f33b363b174dbeae6254e1712da248.png


四、码


1、候选码

2b00fe8648da4b85b1d5a15d705c48e2.png


相关文章
|
7天前
|
存储 安全 搜索推荐
酒店管理系统的数据库的应用以及选择
酒店管理系统数据库关乎运营效率和服务质量。数据库用于数据存储、管理、分析及客户关系管理,确保房态与预订精准。选择时重视性能稳定性、数据安全、易用性、可扩展性和成本效益。合适的数据库能提升酒店运营效率并优化客户体验。
20 2
|
1月前
|
存储 监控 关系型数据库
数据库核心术语解析与应用
数据库核心术语解析与应用
61 0
|
1月前
|
存储 运维 关系型数据库
数据的力量:构筑现代大型网站之数据库基础与应用
数据的力量:构筑现代大型网站之数据库基础与应用
49 0
|
9天前
|
存储 传感器 监控
数据库的应用
数据库广泛应用于电子商务、物流、酒店管理、医疗、航空、教育、政府和物联网等领域,用于高效存储和管理商品信息、订单数据、医疗记录、航班详情等各类数据,提升效率和服务质量。随着技术进步,其应用场景将持续扩展。
10 1
|
16天前
|
NoSQL 大数据 数据挖掘
现代数据库技术与大数据应用
随着信息时代的到来,数据量呈指数级增长,对数据库技术提出了前所未有的挑战。本文将介绍现代数据库技术在处理大数据应用中的重要性,并探讨了一些流行的数据库解决方案及其在实际应用中的优势。
|
28天前
|
存储 NoSQL 大数据
新型数据库技术在大数据分析中的应用与优势探究
随着大数据时代的到来,传统数据库技术已经无法满足海量数据处理的需求。本文将探讨新型数据库技术在大数据分析中的应用情况及其所带来的优势,为读者解析数据库领域的最新发展趋势。
|
1月前
|
缓存 Java 数据库连接
mybatis 数据库缓存的原理
MyBatis 是一个流行的 Java 持久层框架,它封装了 JDBC,使数据库交互变得更简单、直观。MyBatis 支持两级缓存:一级缓存(Local Cache)和二级缓存(Global Cache),通过这两级缓存可以有效地减少数据库的访问次数,提高应用性能。
282 1
|
1月前
|
存储 机器学习/深度学习 NoSQL
数据库技术的发展与应用
数据库技术的发展与应用
|
16天前
|
SQL 数据可视化 关系型数据库
轻松入门MySQL:深入探究MySQL的ER模型,数据库设计的利器与挑战(22)
轻松入门MySQL:深入探究MySQL的ER模型,数据库设计的利器与挑战(22)
|
16天前
|
存储 关系型数据库 MySQL
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)