教材:王珊 萨师煊 编著 数据库系统概论(第5版) 高等教育出版社
注:文档高清截图在后

第2章 关系数据库

2.1 关系数据结构及其形式化定义

1、关系数据库系统是支持关系模型的数据库系统。关系模型由IBM的E.F.Codd提出。E.F.Codd因此获得Turing奖。目前全球的数据库几乎都为关系数据库。第1章初步介绍了关系模型及其基本术语,本章将稍微深入地介绍关系模型。
回忆:数据模型的三要素是:数据结构、数据操作、数据的完整性约束条件。简单说成:结构、操作、约束条件。

2、关系模型的数据结构就是关系。关系可以画成二维表来表示。这种结构虽然简单,却能表达丰富的语义,描述现实世界的实体及各种联系。关系模型建立在集合代数的基础上,下面从集合论的角度给出关系数据结构的形式化定义。

3、域(domain)是一组相同类型的值的集合。
例如:自然数、整数、实数、复数、32字节以内的字符串集合、{0,1}、{男、女}、离散闭区间 [0, 255] 、double能表示的全部数、本校全体学生、某人的计算机中包含的全部单机游戏、S店于2019年8月售出的全部UHD BD、作家N创作的全部科幻小说。

4、笛卡尔积(cartesian product)是一种集合运算。设集合D1,D2,……,Dn,则它们的笛卡尔积为

cartesian = 与Rene Descartes相关的。
笛卡尔积生成的元素 (d1,d2,……,dn) 叫作一个n元组(n-tuple),简称元组(tuple)。元素中的每一个值都是一个分量(component)。
笛卡尔积可以表示为一张二维表。每行对应一个元组,而每列的值都来自一个域。
例如:给出导师姓名、研究方向、研究生姓名的集合
D1 = {胡安,张维文,祁连武},D2 = {计算机视觉,自然语言处理,语音识别},D3 = {林小亮,李立思,黄佳琪}。则
D1×D2×D3 =
{
(胡安,计算机视觉,林小亮),(胡安,计算机视觉,李立思),(胡安,计算机视觉,黄佳琪),
(胡安,自然语言处理,林小亮),(胡安,自然语言处理,李立思),(胡安,自然语言处理,黄佳琪),
(胡安,语音识别,林小亮),(胡安,语音识别,李立思),(胡安,语音识别,黄佳琪),
(张维文,计算机视觉,林小亮),(张维文,计算机视觉,李立思),(张维文,计算机视觉,黄佳琪),
(张维文,自然语言处理,林小亮),(张维文,自然语言处理,李立思),(张维文,自然语言处理,黄佳琪),
(张维文,语音识别,林小亮),(张维文,语音识别,李立思),(张维文,语音识别,黄佳琪),
(祁连武,计算机视觉,林小亮),(祁连武,计算机视觉,李立思),(祁连武,计算机视觉,黄佳琪),
(祁连武,自然语言处理,林小亮),(祁连武,自然语言处理,李立思),(祁连武,自然语言处理,黄佳琪),
(祁连武,语音识别,林小亮),(祁连武,语音识别,李立思),(祁连武,语音识别,黄佳琪)
}
该笛卡尔积可以画成3列27行的表,第一行记录每列的属性名,分别为:导师姓名、研究方向、研究生姓名,剩下27行每行可以放入1个笛卡尔积中的元素,对应关系中的元组。由于篇幅的关系,这里省略表格示例。

5、对有穷集合,其含有的元素个数在数值上等于其基数(cardinal number)。事实上基数的定义比这个叙述要复杂,无穷集也有其基数,本文不予讨论。如果有限集合D1,D2,……,Dn的基数分别为c1,c2,……,cn,那么D1×D2×……×Dn的基数C = c1c2……cn。

6、已知域D1,D2,……,Dn,则其笛卡尔积D1×D2×……×Dn叫作域D1,D2,……,Dn的关系,表示为R(D1,D2,……,Dn)。R为关系名,n为关系的目或度(degree)。关系中的每个元素是关系的元组,一般记为t。n = 1时,该关系为一元关系;n = 2时,该关系为二元关系。显然n目关系一定有n个属性。关系是笛卡尔积的有限子集,因为笛卡尔积的很多元素不对应现实意义。比如在上面的举例中,一个导师一般只在一个专业方向带研究生,一个研究生一般只有一个导师(以及一个研究方向),而一个专业方向一般有多个导师,一个导师可以带多名研究生。因此上述实例中的很多元组不具有实际意义。笛卡尔积本身一般不具有实际语义,而它的某个真子集才对应实际生活中的关系。

7、若关系中某些属性的值能够唯一标识一个元组而其真子集都不能,就称这部分属性为候选码(candidate key)。例如记录学生信息的一张二维表,只有学号是唯一的,其余信息都可能重复,那么学号属性为候选码。一个关系可以有多个候选码,一般只选一个作为主码(primary key)。最简单的情况下,候选码只包含一个属性。最极端的情况下,关系模式的全部属性都称为候选码,称为全码(all-key)。比如记录某品牌工作站的信息的表中,S/N(Serial number,序列号)和网卡的MAC地址都是唯一的,都可以标识一个元组——一台工作站及其全部信息,那么通常只选其中一个作为主码。

8、关系可以有三种类型:基本关系(也称基本表、基表)、查询表和视图表。基本表是实际存在的表,是实际存储数据的逻辑表示;查询表则是查询结果对应的表;视图表则是由基本表或其它识图导出的表,是虚表,不对应存储的数据。

9、关系可以是无限的集合,但是我们不可能建立一个无限大的数据库。所以关系数据模型中的关系必须是有限集合。对笛卡尔积的每个元素,如果任意多(≥2)个分量交换位置,那么交换前后的两个元素不能视为同一个元素,意即笛卡尔积的元素分量不满足交换律。这么说来,将笛卡尔积的一个子集——关系画成二维表后,由于这个子集保留了笛卡尔积及其每个元素的性质,列也不允许被变动。不过,我们可以为关系表中的每个列命名一个不同的属性名。显然,命名之后将列的位置可以自由交换而不会影响元组的数据,也就是说取消了关系属性的有序性。

10、基本关系具有如下5条性质。
(1)列是同质的(homogeneous)。比如说一个关系的二维表中,第i、j、k列分别为片名、豆瓣评分、IMDb评分。显然第i、j、k列的数据只能分别来自片名、豆瓣评分、IMDb评分的集合。也就是说,每一列的分量是同类的数据,来自同一个域。
(2)不同的列可以出自同一个域也可以来自不同的域。比如某个关系的二维表中,第i、j列分别是原作者姓名、译者姓名,那么它们可以都来自姓名域。
(3)行、列都可以自由调换顺序。
(4)任意两个元组的对应的候选码都不能取相同的值。
(5)分量必须取原子值,即分量都必须是不可分的数据项。也就是说把关系画成二维表时不允许表中有表。下图是一个表中有表的例子:

关系模型要求关系必须是规范化的(normalized)。规范化的关系简称为范式(Normal form,NF)。其概念将在第6章进一步讲解。

11、关系数据库中,关系模式是型,关系是值。关系模式是对关系的描述。关系是元组的集合,关系模式需要描述元组集合的结构,比如说由哪些属性构成,属性分别来自哪些域,属性与域之间的关系。关系模式还需要刻画完整性约束条件。这些条件用于检验数据是否正确(符合逻辑、符合事实等)。比如:某公司的职工在70岁退休,那么对应的关系中不能出现70岁以上的在职职工的元组。
关系的描述称为关系模式(relation schema),可以记作R(U,D,DOM,F),这四个参数分别是:属性集合、属性的域、属性向域的映像集合、属性间数据的依赖关系的集合。属性间的数据依赖将在第6章讨论,本章中的关系模式仅涉及关系吗、属性名、域名、属性向域的映像4部分,记作R(U,D,DOM)。关系模式可以简记为R(U) 或R(A1,A2,……,An)。R为关系名,A1,A2,……,An为属性名。

12、关系模式通常是静态的、稳定的,而关系是动态的、随时间变化的。关系操作会不断更新数据。例如,学生关系模式在不同的学年基本上都相同,而学生关系则不同。实际工作中,人们常常把关系和关系模式都笼统地称为关系,这时需要根据上下文加以区别。

13、所有关系的集合构成一个关系数据库。关系数据库也有型和值之分。关系数据库的型也称关系数据库模式,是对关系数据库的描述。关系数据库模式包含若干个域的定义与域上定义的若干关系模式。关系数据库的值就是这些关系模式在某一时刻对应的关系的集合,通常就称为关系数据库。

2.2 关系操作

1、关系模型中常用的关系操作包括查询(query)和插入(insert)、删除(delete)、修改(modify,有时写作更新(update))操作两大部分。查询操作可分为选择(select)、投影(project)、连接(join)、除(divide)并(union)、差(difference)、交(intersection)、笛卡尔积(cartesian product)等。选择、投影、并、差、笛卡尔积是5中基本操作。其它操作可以用基本操作来定义与导出,就像乘法可以用加法来定义和导出一样。

2、关系操作的特点是集合操作方式,即操作的对象和结果都是集合。这种操作方式称为一次一集合(set-at-a-time)。非关系数据模型的数据操作方式则为一次一记录(record-at-a-time)。

3、我们通过关系数据语言来进行关系操作。早期的关系操作能力通常用代数或逻辑方式来表示,分别称为关系代数(relational algebra)和关系演算(relational calculus)。两者分别用对关系的运算和谓词来表达查询要求。关系演算可按谓词变元(变量)的基本对象是元组变量还是域变量分为元组关系演算和域关系演算。一个关系数据语言能够表示关系代数可以表示的查询,称为具有完备的表达能力,简称关系完备性。已经证明:关系代数、元组关系演算和域关系演算三种语言在表达能力上都是等价的,都具有完备的表达能力。
关系代数、元组关系演算和域关系演算均是抽象的查询语言,与具体的DBMS中实现的实际语言不完全一样。但它们可以用作评估实际系统中查询语言能力的标准或基础。实际的查询语言除了关系代数与演算的功能外,还提供了聚集函数、关系赋值、算术运算等多种功能。

4、有一种介于关系代数和关系演算之间的结构化查询语言(Structured Query Language,SQL)。SQL不仅具有丰富的查询功能,而且具有数据定义和数据控制功能,是集查询、数据定义语言(DDL)、数据操纵语言(DML)、数据控制语言(DCL)于一体的关系数据语言。它充分体现了关系数据语言的特点和优点,是关系数据库的标准语言。
综合3和4,关系数据语言可以分为三类:关系代数语言(如ISBL)、关系演算语言、具有关系代数和关系演算双重特点的语言(如SQL)。关系演算语言分为元组关系演算语言(如ALPHA、QUEL)和域关系演算语言(如QBE)。

2.3 关系的完整性

1、关系模型的完整性规则是对关系的约束条件,也就是说无论关系的值取什么,都应该满足这些约束。这些约束实际上是现实世界的要求。

2、关系模型中有三类完整性约束:实体完整性(entity integrity)、参照完整性(referential integrity)、用户定义的完整性(user-defined integrity)。实体完整性和参照完整性是一切关系模型必须满足的,称为关系的两个不变性。用户定义的完整性则是在应用领域随场合的不同而不同的约束条件,体现了具体领域中的语义约束。

3、实体完整性规则 若属性(一个或一组)A是基本关系R的主属性,则A不能为空(null)。空值就是不知道、不存在或无意义(未定义)的值。例如:某网站的数据库中保存访客记录,以IP作为主码标识特定主机,则IP不能为空,否则该条记录无效。如果主码包含多个属性,这些属性全部都不能为空。

4、设F是基本关系R的一个(组)属性,但不是R的码,KS是基本关系S的主码。如果F与KS存在某种对应关系,就称F是R的外码(foreign key),并称R为参照关系(referencing relation),S为被参照关系(referenced relation)或目标关系(target relation)。R和S不一定是不同的关系。
例如:“T影星主演的影片F的首映礼的地点”关系中,“地点”与城市关系的主码“城市名称”对应(为了讨论方便,这里假定城市不重名)。选择首映礼的地点需要考察哪些城市可以选,那么“T影星主演的影片F的首映礼的地点”关系为参照关系,城市关系为被参照关系。

5、参照完整性规则 若属性(组)F是基本关系R的外码,它与基本关系S的主码KS存在对应关系(R和S不一定不同),则对于R中每个元组在F上的值必须取空值或S中某个元组的主码值。例如:“某人收藏的UP主X的鬼畜视频”关系中每个元组的“视频名称”要么为空,可能表示录入时忘记视频名;要么只能来自“UP主X投稿的视频”关系中的“视频名称”,也就是说不能把非X发布的视频名称填入“某人收藏的UP主X的鬼畜视频”的关系中。

6、关系模型强制要求关系数据库系统支持实体完整性和参照完整性。而此外,不同的关系数据库系统根据应用环境的不同,往往还需要一些特殊的约束条件,反映在具体场景中投入应用的数据必须满足的额外要求。这就是用户定义的完整性。比如在某次批改上机作业的过程中,运用了C++11或更新版本的特性的提交才算符合课程要求,否则该提交视为无效,不予录入作业关系;比如某剧组为某科幻电视剧启用新人演员并准备进一步训练,在加州第一次海选完毕并向数据库添加复选名单时,由于动作戏的要求,限制复选人员关系中所有通过初审者必须持有Class C(或以上)以及Class M1驾驶执照。










【梳理】数据库系统概论 第2章 关系数据库 2.1 关系数据结构及其形式化定义 2.2 关系操作 2.3 关系的完整性相关推荐

  1. 数据库系统概论:第二章 关系数据库

    2.1 关系数据结构及形式化定义 2.1.1 关系 1. 域(domain) 一组具有相同数据类型的值的集合 2. 笛卡儿积 域上的一种集合运算,笛卡儿积是不同域的所有元素的所有组合 一个域允许的不同 ...

  2. 《数据库系统概论》 第二章 关系数据库

    2.1 关系数据结构及形式化定义 2.1.1 关系 1. 域(domain):一组具有相同数据类型的**值**的集合 2. 笛卡儿积:域上的一种集合运算 一个域允许的不同取值个数称为这个域的基数笛卡儿 ...

  3. (数据库系统概论|王珊)第二章关系数据库-第一节:关系数据结构及其形式化定义

    文章目录 一:关系 (1)域 (2)笛卡尔积 (3)关系 A:基本概述 B:码相关概念 C:关系的三种类型 二:关系模式 三:关系数据库 (1)基本概念 (2)关系数据库的型与值 前面说过,数据模型由 ...

  4. 【数据库系统】数据库系统概论====第六章 关系数据库理论

    第六章 关系数据库理论 文章目录 第六章 关系数据库理论 6.1问题的提出 6.2规范化 6.2.1函数依赖 6.2.2码 6.2.3范式 6.2.4 2NF 6.2.5 3NF 6.2.6 BCNF ...

  5. 2.1 《数据库系统概论》关系数据结构及形式化定义(关系、关系模式、关系数据库)

    文章目录 0.思维导图 1. 关系 (1)域(Domain) (2)笛卡尔积(Cartesian Product) (3)关系(Relation) (4)三类关系 2.关系模式 (1)什么是关系模式 ...

  6. 笔记 ~ 第二章 - 2.1 关系数据结构及形式化定义

    目录 前言 1. 关系 (1)域 (2)笛卡尔积 (3) 关系(Relation) 2. 关系模式 (1)什么是关系模式 (2)定义关系模式 (3)关系模式与关系 3. 关系数据库 (1)关系数据库 ...

  7. 关系数据库之关系数据结构及形式化定义

    关系数据库简介 提出关系模型的是美国IBM公司的E.F.Codd 1970年提出关系数据模型 E.F.Codd, "A Relational Model of Data for Large ...

  8. 数据库系统概论-第三章 关系数据库标准语言 SQL

    概述 SQL的特点 综合统一 SQL集数据定义语言,数据操纵语言,数据控制语言的功能于一体,语言风格统一,可以独立完成数据库生命周期中的全部活动,可以执行以下一系列要求: 定义和修改.删除 关系模式 ...

  9. 【梳理】数据库系统概论 第8章 数据库编程 8.1 嵌入式SQL 8.2 过程化SQL 8.3 存储过程和函数 8.4 ODBC编程

    教材:王珊 萨师煊 编著 数据库系统概论(第5版) 高等教育出版社 注:文档高清截图在后 第8章 数据库编程 标准SQL是非过程化的查询语言,操作统一.面向集合.功能丰富.使用简单.非过程化语言是相对 ...

最新文章

  1. 最常见企业管理SAAS软件有哪些?要解决哪些问题?
  2. Kinect v2.0 for windows开发环境说明
  3. 机器学习基石13-Hazard of Overfitting
  4. case when then else多个条件_sqlserver条件分支case when使用教程
  5. Linux笔记-bash中字符串拆分并且存到数组中
  6. Huffman编码解码
  7. kafka基础之介绍和分布式集群搭建
  8. pytorch中的反卷积的output_padding参数
  9. 【优化覆盖】基于matlab萤火虫算法求解无线网络传感覆盖优化问题【含Matlab源码 1275期】
  10. Coin3D相关模块学习
  11. bjui—关闭dialog以及当前标签
  12. PDF怎么编辑修改内容
  13. svn怎么比对文件_svn导出文件进行比较
  14. 【Zotero同步管理】【Zotero 6.0 + 坚果云 + iPad官方zotero APP】最新版教程
  15. android studio安卓订餐管理系统
  16. 小程序 video 控制器外观调整_Kessil 360X Tuna Sun无线控制器使用分享
  17. caxa计算机绘图工程师,CAXA计算机绘图
  18. Unity插件 - MeshEditor(一) 3D线段作画 模型网格编辑器
  19. 绘制基本网络图(Networkx)
  20. 独家专访李林 | 回归火币后的一年

热门文章

  1. 算法入门 12.二叉搜索树
  2. executor 使用_使用Executor更快地启动Windows Apps
  3. ios获取本机号码等
  4. 3GPP TS 23502-h20 中英文对照 | 4.15.3.2.3b Specific NEF service operations information flow for lo
  5. Greenplum(一) 基本特性 Master Segment
  6. 深度学习基础-----ReLu激活函数的反向传递过程
  7. 想要在PDF文档中提取签名和图像信息?有这篇Aspose.PDF for .NET干货教程就够了!
  8. linux下的ehci控制器调试
  9. 幽默人生 - twelfth (12th)
  10. 通过BigExcelWriter导出包含数据和图片的excel表,涉及到sheet.createDrawingPatriarch()画图对象,涉及到url转二进制数据