数据库系统原理 第2章 关系数据库 2.1 关系数据结构及其形式化定义 2.2 关系操作 2.3 关系的完整性

硬知❤知知 2019-09-09 14:29
170

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/COFACTOR/article/details/100606918
教材:王珊 萨师煊 编著 数据库系统概论(第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驾驶执照。
————————————————
版权声明:本文为CSDN博主「COFACTOR」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/COFACTOR/article/details/100606918

评论
暂无任何评论
已成功加入购物车!