【数据库原理 • 二】关系数据库理论

简介: 数据库技术是计算机科学技术中发展最快,应用最广的技术之一,它是专门研究如何科学的组织和存储数据,如何高效地获取和处理数据的技术。它已成为各行各业存储数据、管理信息、共享资源和决策支持的最先进,最常用的技术。当前互联网+与大数据,一切都建立在数据库之上,以数据说话,首先需要聚集数据、分析数据和管理数据,数据库技术已成为各种计算机系统的核心技术。数据库相关知识也已成为每个人必须掌握的知识。

在学习上一篇数据库系统概念后,我们知道数据模型是描述数据数据、数据联系、数据的语义以及一致性约束的概念工具的集合,现在我们系统的学习关系数据库。学习关系数据库前,带大家了解一些集合的概念。

微信图片_20230527152859.png



如果集合A的任意一个元素都是集合B的元素,那么称集合A是集合B的子集,用A⊆B表示,读作A包含于B,或者B包含A


如集合B中至少有一个元素不属于A,那么集合A叫做集合B的真子集。也就是A包含于B,且A不等于B,就说集合A是集合B的真子集


一些常用的符号:


符号 含义

子集符号 ⊆、⊇

非子集符号 ⊈、⊉

真子集符号 ⫋、⫌、⊊、⊋、⊂、⊃

非真子集符号 ⊄、⊅

属于 ∈(元素与集合的关系)

不属于 ∉(元素与集合的关系)

并符号 ∨,满足其中一个条件

交符号 ∧,满足两个条件

σ选择运算符 满足σ的条件

θ比较运算符 它可以是>,≥,<,≤,=或< >

集合描述法 :A={x|P}(x为该集合的元素的一般形式,P为这个集合的元素的共同属性)



一、关系及关系模式

美国 E.F.Codd 1970年:“A Relational Model of Data for Large Shared Data Banks”,《Communication of the ACM》标志着关系模型的提出,也是标志着层次、网状数据库的消亡。


1.1 关系模型的基础概念

1.1.1 域(Domain)

域是一组具有相同数据类型的值的集合。例:整数,{‘男’,‘女’},简单理解的话就是属性的取值范围。


1.1.2 笛卡尔积

给定一组域D1,D2,…,Dn,允许其中某些域是相同的。

D1,D2,…,Dn的笛卡尔积为:

D1×D2×…×Dn ={(d1,d2,…,dn)|di∈Di,i=1,2,…,n}


集合中的d1来自于D1,以此类推,所有域的所有取值的一个组合并且不能重复就是笛卡尔积。


元组(Tuple)


笛卡尔积中的每一个元素(d1,d2,…,dn)叫作一个n元组(n-tuple),或简称为元组(Tuple)。简单理解表中的一行即为一个元组,也就是行


分量(Component)


笛卡尔积元素(d1,d2,…,dn)中的每一个值di叫作一个分量,也就是某一行对应属性的值


基数(Cardinal number)


若Di(i=1,2,…,n)为有限集,其基数为Mi(i=1,2,…,n),则D1×D2×…×Dn的基数M为: 每个域基数的连乘的个数。


例如,给出3个域:


D1=导师集合SUPERVISOR={张清玫,刘逸}

D2=专业集合SPECIALITY={计算机专业,信息专业}

D3=研究生集合POSTGRADUATE={李勇,刘晨,王敏}


注:{张清玫,刘逸}就是元组,刘逸就是分量


这3个域的笛卡尔积的运算如下:

D1×D2×D3={

(张清玫,计算机专业,李勇),(张清玫,计算机专业,刘晨),

(张清玫,计算机专业,王敏),(张清玫,信息专业,李勇),

(张清玫,信息专业,刘晨),(张清玫,信息专业,王敏),

(刘逸,计算机专业,李勇),(刘逸,计算机专业,刘晨),

(刘逸,计算机专业,王敏),(刘逸,信息专业,李勇),

(刘逸,信息专业,刘晨),(刘逸,信息专业,王敏) }


基数为2×2×3=12,但是在现实生活中是不存在这样关系的。


1.1.3 关系(Relation)

关系:


一个关系对应通常说的一张表


D1×D2×…×Dn的子集叫作在域D1,D2,…,Dn上的关系,表示为R(D1,D2,…,Dn)


R:关系名


n:一个关系中,有几个域做笛卡尔积的构成称作关系的目或度(Degree),也就是几个列


元组


关系中的每个元素是关系中的元组,通常用t表示。也就是行


属性


关系中不同列可以对应相同的域;为了加以区分,必须对每列起一个名字,称为属性(Attribute)。也就是列



候选码(Candidate key):若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码

主码:若一个关系有多个候选码,则选定其中一个为主码(Primary key)

主属性:候选码的诸属性称为主属性(Prime attribute), 不包含在任何侯选码中的属性称为非主属性(Non-Prime attribute)或非码属性(Non-key attribute)

例如,主码?(假设学生不会重名)


SUPERVISOR SPECIALITY POSTGRADUATE

张清玫 计算机专业 李勇

张清玫 计算机专业 刘晨

刘逸 信息专业 王敏

POSTGRADUATE 就是主码


1.2 关系模式

关系模式(Relation Schema)是型,关系是值


关系模式可以形式化地表示为:R(U,D,DOM,F),其中


R:关系名

U:组成该关系的属性名集合

D:U中属性所来自的域

DOM:属性向域的映象集合

F:属性间数据的依赖关系的集合


二、关系模型的三要素

2.1 关系数据结构

关系模型的数据结构是二维表,需要注意是关系中的描述和表中的描述是不一样的


关系 表

关系名 表名

关系模式 表头

关系 二维表

元组 记录或行

属性 列

属性值 列值

分量 一条记录中的一个列值

微信图片_20230527152918.png


关系必须是规范化的

最基本的规范条件:每一个分量必须是不可分的数据项

微信图片_20230527152922.png



基本关系的性质


列是同质的(Homogeneous),取值的属性是相同的

不同的列可出自同一个域,其中的每一列称为一个属性,不同的属性要给予不同的属性名

列的顺序无所谓,列的次序可以任意交换

任意两个元组的候选码不能相同

行的顺序无所谓,行的次序可以任意交换


2.2 关系数据操作

查询操作: 选择、投影、连接、除、并、差、交、笛卡尔积,其中选择、投影、并、差、笛卡尔积是5种基本操作


数据更新: 插入、删除、修改


2.2.1 关系操作的特点

用的是集合操作方式,操作的对象和结果都是集合,一次一集合的方式


2.2.2 关系操作的查询语言

查询操作是在关系数据中最常用的操作,分为专门的关系运算符和集合运算符,其中有如下操作语言:

微信图片_20230527152958.png


关系代数语言: 用对关系的运算来表达查询要求,代表:ISBL


关系演算语言: 用谓词来表达查询要求


元组关系演算语言:谓词变元的基本对象是元组变量,代表:APLHA, QUEL

域关系演算语言 :谓词变元的基本对象是域变量,代表:QBE

具有关系代数和关系演算双重特点的语言:SQL(Structured Query Language)


2.3 关系完整性约束

2.3.1 实体完整性

若属性A是基本关系R的主属性,则属性A不能取空值。


例如选修(学号,课程号,成绩),“学号、课程号”为码,“学号”和“课程号”两个属性都不能取空值


2.3.2 参照完整性规则

若属性(或属性组)F是基本关系R的外码它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:或者取空值(F的每个属性值均为空值)或者等于S中某个元组的主码值。

微信图片_20230527153003.png



要么学生中的ClaID为空,要么是班级信息表中ClaID属性值。


2.3.3 用户定义的完整性

反映某一具体应用所涉及的数据必须满足的语义要求。

例如课程(课程号,课程名,学分),“课程号”属性必须取唯一值,“学分”属性只能取值{1,2,3,4}


三、关系代数

关系代数运算符中包含多种数学运算

微信图片_20230527153026.png



3.1 集合运算符

3.1.1 并(Union)

R和S具有相同的目n(即两个关系都有n个属性),相应的属性取自同一个域


R∪S仍为n目关系,由属于R或属于S的元组组成


R∪S={t|t∈R∨t∈S}


∪并符号:集合基本符号,表示至少满足一个集合

∨并符号:逻辑基本符号,表示两个命题有一个发生则命题成立


也就是t∈R要么t∈S

微信图片_20230527153031.png



3.1.2差(Difference)

R和S具有相同的目n,相应的属性取自同一个域


R - S仍为n目关系,由属于R而不属于S的所有元组组成


R -S = { t|t∈R∧t∉S }


∧交符号:逻辑基本符号,表示两个命题同时发生则命题成立

∉符号:集合基本符号,不属于的意思


也就是t∈R

微信图片_20230527153107.png



3.1.3 交(Intersection)

R和S,具有相同的目n,相应的属性取自同一个域


R∩S仍为n目关系,由既属于R又属于S的元组组成


R∩S = { t|t∈R∧t ∈S }

R∩S = R –(R-S)


∩交符号:集合基本符号,表示满足2个集合

微信图片_20230527153110.png



3.1.4 笛卡尔积

微信图片_20230527153112.png

微信图片_20230527153116.png



3.2 专门的关系运算符

3.2.1 引入一些记号

微信图片_20230527153157.png

微信图片_20230527153201.png微信图片_20230527153204.png微信图片_20230527153208.png

微信图片_20230527153911.png

3.2.2 选择(Selection)

选择又称为限制(Restriction)

选择运算符的含义:在关系R中选择满足给定条件的诸元组σF( R )= {t|t∈R∧F(t)= ‘真’}


给大家解释一下这个公式:


σ运算符σF(): 在括号中写出运算的关系,在F处写出选择条件的表达式


={t|t∈R∧F(t)= ‘真’}: 它的结果是一个元组的集合,这个元组是属于关系R的,并且满足σ运算符σF()F处写出选择条件的表达式

F是选择条件,是一个逻辑表达式,取值为“真”或“假”

微信图片_20230527153928.png



基本形式为:X1θY1


θ表示比较运算符,它可以是>,≥,<,≤,=或< >


选择运算是从关系R中选取使逻辑表达式F为真的元组,是从行的角度进行的运算

微信图片_20230527153933.png



例如,查询σ学号 =2022003(Student)

微信图片_20230527153937.png

3.2.3 投影

投影:从R中选择出若干属性列组成新的关系, πA( R ) = { t[A] | t ∈R }


微信图片_20230527154022.png


πA:R中的属性列


投影操作主要是从列的角度进行运算:


投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组(避免重复行)

微信图片_20230527154024.png



列如,求Student关系上学生姓名和所在系两个属性上的投影, πSname,Sdept(Student)

微信图片_20230527154027.png

3.2.4 连接

一般连接运算

微信图片_20230527154101.png

从两个关系的笛卡尔积中选取属性间满足一定条件的元组

微信图片_20230527154104.png


R跟S连接就等于Tr和Ts连接的集合,Tr和Ts表示元组的连接,Tr来自关系R,Ts来自关系S,并且满足AθB的条件


微信图片_20230527154108.pngA和B:分别为R和S上度数相等且可比的属性组


θ:比较运算符


连接运算从R和S的广义笛卡尔积R×S中选取R关系在A属性组上的值与S关系在B属性组上的值满足比较关系θ的元组


等值连接(equijoin)


θ为“=”的连接运算称为等值连接从关系R与S的广义笛卡尔积中选取A、B属性值相等的那些元组,即等值连接为:

微信图片_20230527154113.png



自然连接(Natural join)


自然连接是一种特殊的等值连接,两个关系中进行比较的分量必须是相同的属性组,在结果中把重复的属性列去掉


自然连接的含义:R和S具有相同的属性组B


微信图片_20230527154117.png


一般的连接操作是从行的角度进行运算。




自然连接还需要取消重复列,所以是同时从行和列的角度进行运算


例如关系R和关系S如下所示

微信图片_20230527154121.png


3.2.5 除

给定关系R (X,Y) 和S (Y,Z),其中X,Y,Z为属性组。R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域集。R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在 X 属性列上的投影:元组在X上分量值x的象集Yx包含S在Y上投影的集合,记作:


微信图片_20230527154252.png


除操作是同时从行和列角度进行运算


设关系R、S分别为下图的(a)和(b),R÷S的结果如右下图:


微信图片_20230527154256.png


关系R中,A可以取四个值{a1,a2,a3,a4}


a1的象集为 {(b1,c2),(b2,c3),(b2,c1)}


a2的象集为 {(b3,c7),(b2,c3)}


a3的象集为 {(b4,c6)}


a4的象集为 {(b6,c6)}


S在(B,C)上的投影为 {(b1,c2),(b2,c1),(b2,c3) }


只有a1的象集包含了S在(B,C)属性组上的投影,所以 R÷S ={a1}


目录
相关文章
|
2月前
|
关系型数据库 MySQL 数据库
RDS MySQL灾备服务协同解决方案构建问题之数据库备份数据的云上云下迁移如何解决
RDS MySQL灾备服务协同解决方案构建问题之数据库备份数据的云上云下迁移如何解决
|
4月前
|
存储 关系型数据库 MySQL
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
|
2月前
|
消息中间件 Kafka 数据库
深入理解Kafka的数据一致性原理及其与传统数据库的对比
【8月更文挑战第24天】在分布式系统中,确保数据一致性至关重要。传统数据库利用ACID原则保障事务完整性;相比之下,Kafka作为高性能消息队列,采用副本机制与日志结构确保数据一致性。通过同步所有副本上的数据、维护消息顺序以及支持生产者的幂等性操作,Kafka在不牺牲性能的前提下实现了高可用性和数据可靠性。这些特性使Kafka成为处理大规模数据流的理想工具。
47 6
|
2月前
|
SQL 关系型数据库 数据库
数据库空间之谜:彻底解决RDS for SQL Server的空间难题
【8月更文挑战第16天】在管理阿里云RDS for SQL Server时,合理排查与解决空间问题是确保数据库性能稳定的关键。常见问题包括数据文件增长、日志文件膨胀及索引碎片累积。利用SQL Server的动态管理视图(DMV)可有效监测文件使用情况、日志空间及索引碎片化程度。例如,使用`sp_spaceused`检查文件使用量,`sys.dm_db_log_space_usage`监控日志空间,`sys.dm_db_index_physical_stats`识别索引碎片。同时,合理的备份策略和文件组设置也有助于优化空间使用,确保数据库高效运行。
50 2
|
2月前
|
关系型数据库 数据库 数据安全/隐私保护
"告别繁琐!Python大神揭秘:如何一键定制阿里云RDS备份策略,让数据安全与效率并肩飞,轻松玩转云端数据库!"
【8月更文挑战第14天】在云计算时代,数据库安全至关重要。阿里云RDS提供自动备份,但标准策略难以适应所有场景。传统手动备份灵活性差、管理成本高且恢复效率低。本文对比手动备份,介绍使用Python自定义阿里云RDS备份策略的方法,实现动态调整备份频率、集中管理和智能决策,提升备份效率与数据安全性。示例代码演示如何创建自动备份任务。通过自动化与智能化备份管理,支持企业数字化转型。
44 2
|
2月前
|
存储 C# 关系型数据库
“云端融合:WPF应用无缝对接Azure与AWS——从Blob存储到RDS数据库,全面解析跨平台云服务集成的最佳实践”
【8月更文挑战第31天】本文探讨了如何将Windows Presentation Foundation(WPF)应用与Microsoft Azure和Amazon Web Services(AWS)两大主流云平台无缝集成。通过具体示例代码展示了如何利用Azure Blob Storage存储非结构化数据、Azure Cosmos DB进行分布式数据库操作;同时介绍了如何借助Amazon S3实现大规模数据存储及通过Amazon RDS简化数据库管理。这不仅提升了WPF应用的可扩展性和可用性,还降低了基础设施成本。
56 0
|
3月前
|
存储 SQL 关系型数据库
(六)MySQL索引原理篇:深入数据库底层揭开索引机制的神秘面纱!
《索引原理篇》它现在终于来了!但对于索引原理及底层实现,相信大家多多少少都有了解过,毕竟这也是面试过程中出现次数较为频繁的一个技术点。在本文中就来一窥`MySQL`索引底层的神秘面纱!
237 5
|
3月前
|
SQL 存储 安全
SQL数据库:核心原理、应用实践与未来展望
在电子商务领域,SQL数据库用于存储商品信息、用户信息、订单信息等。通过SQL数据库,电商平台可以实现商品的快速检索、用户行为的跟踪分析、订单状态的实时更新等功能,提升用户体验和运营效率。
|
2月前
|
存储 NoSQL 关系型数据库
Web中的数据库:原理、应用与代码实现
Web中的数据库:原理、应用与代码实现
|
3月前
|
消息中间件 关系型数据库 数据库
实时计算 Flink版操作报错合集之在使用RDS数据库作为源端,遇到只能同步21个任务,是什么导致的
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
下一篇
无影云桌面