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

简介: 关系数据理论


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


相关实践学习
体验RDS通用云盘核心能力
本次实验任务是创建一个云数据库RDS MySQL(通用云盘),并通过云服务器ECS对RDS MySQL实例进行压测,体验IO加速和IO突发带来的性能提升;并通过DMS执行DDL,将数据归档到OSS,再结合云盘缩容,体验数据归档带来的成本优势。
相关文章
|
8天前
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
在9月20日2024云栖大会上,阿里云智能集团副总裁,数据库产品事业部负责人,ACM、CCF、IEEE会士(Fellow)李飞飞发表《从数据到智能:Data+AI驱动的云原生数据库》主题演讲。他表示,数据是生成式AI的核心资产,大模型时代的数据管理系统需具备多模处理和实时分析能力。阿里云瑶池将数据+AI全面融合,构建一站式多模数据管理平台,以数据驱动决策与创新,为用户提供像“搭积木”一样易用、好用、高可用的使用体验。
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
|
10天前
|
SQL 关系型数据库 数据库
国产数据实战之docker部署MyWebSQL数据库管理工具
【10月更文挑战第23天】国产数据实战之docker部署MyWebSQL数据库管理工具
47 4
国产数据实战之docker部署MyWebSQL数据库管理工具
|
2天前
|
缓存 NoSQL 数据库
运用云数据库 Tair 构建缓存为应用提速,完成任务得苹果音响、充电套装等好礼!
本活动将带大家了解云数据库 Tair(兼容 Redis),通过体验构建缓存以提速应用,完成任务,即可领取罗马仕安卓充电套装,限量1000个,先到先得。邀请好友共同参与活动,还可赢取苹果 HomePod mini、小米蓝牙耳机等精美好礼!
|
7天前
|
关系型数据库 分布式数据库 数据库
云栖大会|从数据到决策:AI时代数据库如何实现高效数据管理?
在2024云栖大会「海量数据的高效存储与管理」专场,阿里云瑶池讲师团携手AMD、FunPlus、太美医疗科技、中石化、平安科技以及小赢科技、迅雷集团的资深技术专家深入分享了阿里云在OLTP方向的最新技术进展和行业最佳实践。
|
9天前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
22 3
|
9天前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
24 2
|
15天前
|
人工智能 Cloud Native 容灾
云数据库“再进化”,OB Cloud如何打造云时代的数据底座?
云数据库“再进化”,OB Cloud如何打造云时代的数据底座?
|
16天前
|
NoSQL 前端开发 MongoDB
前端的全栈之路Meteor篇(三):运行在浏览器端的NoSQL数据库副本-MiniMongo介绍及其前后端数据实时同步示例
MiniMongo 是 Meteor 框架中的客户端数据库组件,模拟了 MongoDB 的核心功能,允许前端开发者使用类似 MongoDB 的 API 进行数据操作。通过 Meteor 的数据同步机制,MiniMongo 与服务器端的 MongoDB 实现实时数据同步,确保数据一致性,支持发布/订阅模型和响应式数据源,适用于实时聊天、项目管理和协作工具等应用场景。
|
1天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
13 4
|
10天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
49 2