数据库原理与应用笔记(六):关系数据理论

简介: 关系数据理论


6.1问题的提出

什么问题的提出?

前面的章节讨论了数据库系统的一般概念,介绍了关系数据库的基本概念、关系模型三部分以及关系数据库的标准语言SQL,但是还有一个最基本的问题没有提及:针对一个具体问题,应该如何构造一个适合它的数据库模式,即应该构造几个关系模式,每个关系由哪些属性组成等。这是数据库设计的问题,确切地讲是关系数据库逻辑设计问题。


由于关系模型有严格的数学理论基础,并且可以向别的数据模型转换,所以人们就以关系模型为背景来讨论这个问题,形成了数据库逻辑设计的一个有力工具——关系数据库的规范化理论


在笔记二中,我们叙述过一个关系模式应该是五元组,即

R(U,D,DOM,F)

关系名R是符号化的元组语义
U为一组属性
D为属性组U中的属性所来自的域
DOM为属性到域的映射
F为属性组U上的一组数据依赖


由于D、DOM与模式设计关系不大,所以本章把关系模式看成一个三元组即

R<U,F>

当且仅当U上的一个关系r满足F时,r称为关系模式R<U,F>的一个关系

第一范式是什么?

每个分量必须是不可分的数据项,满足这个条件的关系模式就属于第一范式(1NF)


在这里先说一下非形式下数据依赖的概念

数据依赖是一个关系内部属性与属性之间的一种约束关系。这种约束关系是通过属性间值的想等与否体现出来的数据间的相关联系。它是现实世界属性相互联系的抽象,是数据内在的性质,是语义的体现。


数据依赖中最重要的是函数依赖Functional Dependency多值依赖Multi-Valued Dependency


函数依赖是什么呢?

简单来说某一个函数决定了另一个函数,比如一个学号决定了某个学生名字,类似数学中的函数y=f(x)般,即Sname=f(Sno),这样的依赖就称作函数依赖,即Sno函数决定Sname函数,Sname函数依赖于Sno


在不规范的数据库中,常常出现以下几个问题:

数据冗余:比如数据库中每一个职员都对应一个相同的boss,则boss的资料出现的太频繁,浪费了太多的空间

更新异常:比如更新数据库中一个boss的资料时,需要把下属的资料一起更改

插入异常:一个公司刚刚成立,没有职工,则无法把boss信息存入数据库,因为boss对应着某些职工的信息

删除异常:在删除职工的信息时把boss的信息也删除了


综上,一个好的模式应当不会发生插入异常、删除异常和更新异常、数据冗余应尽可能少

接下来我们来讨论怎么样能够使数据库模式变得更好,即规范化问题

6.2规范化

6.2.1函数依赖

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


其实这个很好理解,即上面的说的学号和姓名的关系(比如这个就是关系r),如果学号X确定了,则在任何元组中,姓名Y都是固定的,则称学号确定姓名或姓名依赖于学号,学号→姓名

函数依赖和别的数据依赖一样是语义范畴的概念,只能根据语义来确定一个函数依赖


比如姓名→年龄这个函数依赖只有在该部门没有同名人的条件下成立,如果允许有同名人则依赖失效了

有关的一些术语和记号:2020062417030815.png

对于任一关系模式,平凡函数依赖都是必然成立的,它不反映新的语义。若不特别声明,总是讨论非平凡的函数依赖。

20200624170446355 (1).png下面的完全函数依赖,部分函数依赖和传递函数依赖的定义

20200624170606787.png

简单来说,完全函数依赖就是一个非主属性完全依赖于一个候选码,比如在一个学号,课程号,系别,成绩的属性组中,候选码是学号和课程号,成绩是由学号和课程号共同决定得出的,而系别只要学号就可以确定了,则成绩就是完全依赖,系别就是部分依赖

20200624170642782.png

如有看概念和例子对以上依赖不明白的同学可以私聊滴滴作者。

6.2.2码

20200624171307670.png

2020062417140924.png

关于码的概念还是比较抽象的,笔者在这里进行理解性的叙述一下

首先什么是候选码,候选码首先是一个属性或一个属性组,其次是可以决定一个属性,比如学号能决定姓名,学号就是候选码,学号和课程号可以决定某个课程的成绩(通过学号可以知道姓名,通过姓名+课程号可以知道成绩)则学号和课程号这个属性组合也是候选码

有多个候选码就选一个作为主码

在候选码中的属性就被称为主属性,没有在候选码中的属性就称为非主属性,比如上面的例子中,学号和课程号就是主属性,成绩就是非主属性

全码就是整个属性组都是候选码,谁都可以决定谁,这样的就是全码,也称all key。


定义:关系模式R中属性或属性组X并非R的码,但X是另一个关系模式的码,则称X是R的外部码foreign key,也称外码


这个在前面的笔记中有过举例,这里不再叙述

6.2.3范式

关系数据库中的关系是要满足一定要求的,满足不同程度要求的为不同范式。满足最低要求的叫做第一范式,简称1NF,以此类推

各种范式之间的关系有

5NF⊂4NF⊂BCNF⊂3NF⊂2NF⊂1NF


可以这样理解,1NF是粗糙的石头,打磨分解后就变的光滑就2NF


即:一个低一级范式的关系模式通过模式分解schema decomposition可以转换成若干个高一级范式的关系模式的集合,这种过程就叫规范化normalization

6.2.4 2NF

定义:若R∈1NF,且每一个非主属性完成函数依赖于任何一个候选码,则R∈2NF

即消除了非主属性对码的部分函数依赖

6.2.5 3NF


20200624173941478.png

6.2.6 BCNF

通常认为BCNF是修正的第三范式,或者扩充的第三范式

2020062417461853.png

由BCNF的定义可以得出结论,一个满足BCNF的关系模式有:

所有非主属性对每一个码都是完全函数依赖
所有主属性对每一个不包含它的码也是完全函数依赖
没有任何属性完全函数依赖于非码的任何一组属性

即消除了主属性对码的部分和传递依赖

注意是主属性,2NF和3NF是非主属性


即,每一个关系中,只有一个决定因素。不要这个主属性可以决定另一个主属性,比如在学生,教师,课程的关系中,学生和老师可以决定上的是哪一门课程,学生和课程可以决定是哪一个老师上课,这样的话,老师算不算决定因素?课程算不算决定因素?即BCNF要消除这个依赖。

20200624175824209.png

6.2.7多值依赖

20200624175911726.png

20200624175938198.png

20200624180016642.png

多值依赖简单来举个例子就是,有一个关系r中有{学科x,学科对应的书籍z}还有一个值是老师y,这个老师y仅仅取决于这个学科x,而与z值无关,这样的就是多值依赖


多值依赖具有以下性质:

①多值依赖具有对称性。即若X→→Y,则X→→Z,其中Z=U-X-Y

②多值依赖具有传递性。即若X→→Y,Y→→Z,则X→→Z

③函数依赖可以看作是多值依赖的特殊情况,即若X→Y,则X→→Y

④若X→→Y,X→→Z,则X→→YZ

⑤若X→→Y,X→→Z,则X→→Y∩Z

⑥若X→→Y,X→→Z,则X→→Y-Z,X→→Z-Y


多值依赖与函数依赖相比具有两个基本的区别

(1)多值依赖的有效性与属性集的范围有关
(2)若函数依赖X→Y在R(U)上成立,则对于任何Y’⊂Y均有X→Y’成立。而多值依赖X→→Y若在R(U)上成立,却不能断言对于仍和Y’⊂Y有X→→Y’成立

6.2.8 4NF

2020062418102657.png

即消除非平凡且非函数依赖的多值依赖
换句话说
都是平凡的函数依赖的多值依赖

6.2.9规范化小结

规范化实质上的概念的单一化

20200624181203988.png


相关文章
|
4天前
|
缓存 关系型数据库 Java
不要将数据库中的“分库分表”理论盲目应用到 Elasticsearch
不要将数据库中的“分库分表”理论盲目应用到 Elasticsearch
13 0
|
1天前
|
分布式计算 Java 关系型数据库
|
3天前
|
存储 NoSQL 搜索推荐
探索新一代数据库技术:基于图数据库的应用与优势
传统关系型数据库在处理复杂的关系数据时存在着诸多限制,而基于图数据库的新一代数据库技术则提供了更为灵活和高效的解决方案。本文将深入探讨图数据库的核心概念、应用场景以及与传统数据库相比的优势,带领读者一窥未来数据库技术的发展趋势。
|
4天前
|
NoSQL 关系型数据库 数据库
数据库同步 Elasticsearch 后数据不一致,怎么办?
数据库同步 Elasticsearch 后数据不一致,怎么办?
10 0
|
10天前
|
存储 运维 Kubernetes
多态关联在数据库设计中的应用和解决方案
多态关联在数据库设计中的应用和解决方案
17 0
|
10天前
|
SQL 关系型数据库 MySQL
【MySQL-1】理解关系型数据库&数据的数据模型
【MySQL-1】理解关系型数据库&数据的数据模型
|
12天前
|
存储 算法 数据库
矢量数据库在图像识别与检索中的应用实践
【4月更文挑战第30天】本文探讨了矢量数据库在图像识别与检索中的应用,通过特征提取(如SIFT、SURF)、编码和相似度度量实现快速识别。在图像检索流程中,经过预处理、特征提取和编码后,矢量数据库用于查询相似特征,排序后展示给用户。实际案例显示,矢量数据库能提升电商平台的商品图像搜索效率和用户体验。随着技术发展,这一领域应用前景广阔。
|
12天前
|
机器学习/深度学习 搜索推荐 数据库
矢量数据库的未来发展趋势:新技术与应用展望
【4月更文挑战第30天】随着AI和机器学习的发展,矢量数据库在处理非结构化数据方面的重要性日益增强。预测到2028年,全球矢量数据库市场将从2023年的15亿美元增长至43亿美元。未来趋势包括:并行计算与分布式架构提升处理能力,硬件加速技术(如TPU和昇腾芯片)提高性能,自适应索引机制优化查询效率。应用领域将拓展至NLP、图像视频分析和推荐系统,为各行业带来更多创新和价值。
|
2天前
|
关系型数据库 MySQL 数据库
docker MySQL删除数据库时的错误(errno: 39)
docker MySQL删除数据库时的错误(errno: 39)
10 0
|
2天前
|
关系型数据库 MySQL 数据库连接
用Navicat备份Mysql演示系统数据库的时候出:Too Many Connections
用Navicat备份Mysql演示系统数据库的时候出:Too Many Connections