数据库原理:关系数据库

本章介绍关系的定义和性质、关系模式和关系数据库模式,以及关系的码和关系的完整性。

本章学习目标:了解域和笛卡儿积的概念;掌握关系的性质; 掌握关系模式的概念和性质;掌握关系的码、关系模型的数据结构、关系的完整性约束。

一、关系的形式化及性质

1.1、关系的形式化定义

1.1.1、域

域(Domain)是一组具有相同数据类型的值的集合,又称为值域(用D表示)。例如,整数、实数和字符串的集合都是域。域中所包含的值的个数称为域的基数(用m表示)。例如,以的教师关系t为例:

D1={刘杨,石丽,顾伟,赵礼,赵希希,张刚},m1=6;D_1=\{刘杨,石丽,顾伟,赵礼,赵希希,张刚\}, m_1=6;

D2={男,女},m2=2;D_2=\{男,女\}, m_2=2;

D3={26,30,32,36,40,50},m3=6。D_3=\{26, 30, 32, 36, 40, 50\}, m_3=6。

其中,D1、D2、D3,分别表示教师关系中的姓名域、性别域和年龄域。

1.1.2、笛卡儿积

给定一组域D1D_1, D2D_2,…,DnD_n(它们包含的元素可以完全不同,也可以部分或全部相同),其笛卡儿积(Cartesian Product)为

D1∗D2∗...∗Dn={(d1,d2,...,dn)∣di∈Di,i=1,2,...,n}。D_1 * D_2 * ... * D_n=\{(d_1, d_2, ..., d_n)|d_i \in D_i, i=1, 2, ..., n\}。

笛卡儿积是一个集合。对于笛卡儿积,有以下几点需注意。

(1)每一个元素(d1,d2,…,dn)(d_1, d_2, …, d_n)中的每一个值did_i叫作一个分量(Component),分量来自相应的域(di∈Di)(d_i \in D_i)。

(2)每一个元素(d1,d2,…,dn)(d_1, d_2, …, d_n)叫作一个n元组(n-Tuple),简称元组(Tuple)。但元组是有序的,相同分量did_i的不同排序所构成的元组不同。例如,以下3个元组是不同的: (1, 2, 3) ≠ (2, 3, 1) ≠ (1, 3, 2)。

(3)若Di(i=1,2,...,n)D_i(i=1, 2, ..., n)为有限集,DiD_i中的集合元素个数称为DiD_i的基数,用mi(i=1,2,…,n)m_i(i=1, 2,…,n)表示,则笛卡儿积D1∗D2∗...∗DnD_1*D_2*...*D_n的基数M[即元组(d1,d2,…,dn)(d_1, d_2, …, d_n)的个数]为所有域的基数的累乘之积。例如,上述教师关系中的姓名域D1D_1和性别域D2D_2的笛卡儿积为D1∗D2D_1 * D_2={(刘杨,男),(刘杨,女),(石丽,男),(石丽,女),(顾伟,男),(顾伟,女),(赵礼,男),(赵礼,女),(赵希希,男),(赵希希,女),(张刚,男),(张刚,女)}。其中,刘杨、石丽、顾伟、赵礼、赵希希、张刚、男、女都是分量,(刘杨,男)、(刘杨,女)等是元组,D1∗D2D_1 * D_2的基数M=m1∗m2=6∗2=12M=m_1*m_2=6 * 2=12,即集合中元组的个数为12。

(4)笛卡儿积可用二维表的形式表示。例如,笛卡儿积D1xD2可表示为下表。

tn sex
刘杨 男
刘杨 女
石丽 男
石丽 女
顾伟 男
顾伟 女
赵礼 男
赵礼 女
赵希希 男
赵希希 女
张刚 男
张刚 女

可以看出,笛卡儿积是集合,集合也可以用二维表来表示,表的每一列由对应的域构成,表的每一行就是集合的一个元组。

1.1.3、关系

笛卡儿积D1∗D2∗...∗DnD_1 * D_2 * ... * D_n的任一子集称为定义在域D1,D2,...,DnD_1, D_2, ..., D_n上的n元关系(Relation),可用R(D1,D2,…,Dn)R (D_1, D_2, …, D_n)表示。其中,R表示关系的名字,n是关系的目或度(Degree)。例如,笛卡儿积D1∗D2D_1 * D_2的某个子集可以构成教师关系T1,如下表所示。

tn sex
刘杨 男
石丽 女
顾伟 男
赵礼 女
赵希希 女
张刚 男

下面是几点说明。

(1)在关系R中,n=1为单元关系,n=2为二元关系,以此类推。例如,教师关系为二元关系。

(2) 关系中的元组常用t表示,关系中元组个数是关系的基数。例如,教师关系的基数为6。

(3)关系中的不同域(列)的取值可以相同,为了加以区别,必须对每个域(列)起一个名字,称为属性,n元关系必有n个属性,属性的名字唯一;属性的取值范围称为值域,等价于对应域Di(i=1,2,.…,n)D_i(i=1, 2, .…, n)的取值范围。具有相同关系框架的关系称为同类关系。

(4)在数学上,关系是笛卡儿积的任意子集,但在实际应用中,关系是笛卡儿积中所取的有意义的子集。例如,上表就是一个有意义的子集。

从关系模型的角度,关系可进一步定义如下。

定义在域D1,D2,……,DnD_1, D_2, ……, D_n(不要求完全相异)上的关系由关系头(Heading)和关系体(Body)组成。

关系头由属性名A1,A2,...,AnA_1,A_2,...,A_n的集合组成,每个属性AiA_i对应一个域Di(i=1,2,…,n)D_i (i=1, 2, …, n)。关系头(关系框架)是关系的数据结构的描述,它是固定不变的。关系体是指关系结构中的内容或者数据,它随元组的插入、删除或修改而变化。

1.2、关系的性质

在关系模型中,关系具有以下性质。

(1)列是同质的,即每一列中的分量必须来自同一个域,必须是同一类型的数据。

(2)不同的属性可来自同一个域,但不同的属性必须有不同的名字。例如,假设某关系中有两个属性“职业”和“兼职”,它们可以来自同一个域{教师,工人,辅导员}。

(3)列的顺序可以任意交换。但交换时,应连同属性名一起交换,否则将得到不同的关系。

(4) 关系中元组的顺序(即行序)可任意,在一个关系中可以任意交换两行的次序。因为关系是以元组为元素的集合,而集合中的元素是无序的,所以作为集合元素的元组也是无序的。

(5)关系中不允许出现相同的元组。因为数学上集合中没有相同的元素,而关系是元组的集合,所以作为集合元素的元组应该是唯一的。

(6)关系中每一分量必须是不可分的数据项,也就是说,不能出现“表中有表”的现象。满足此条件的关系称为规范化关系,否则称为非规范化关系。

例如,下表1是非规范化关系。可以把其中的属性“籍贯”分成两个新的属性,即“省”、“市/县”,将其规范化,如下表2所示。

表1:非规范化关系

姓名 籍贯 籍贯
省 市 / 县
张强 吉林 长春
王丽 山西 大同

表2:规范化关系

姓名 省 市 / 县
张强 吉林 长春
王丽 山西 大同

二、关系模式与关系数据库模式

2.1、关系模式

关系数据库中,关系模式是型,关系是值。关系模式(Relation Schema)是对关系的描述。

关系的描述称为关系模式。它可以形式化地表示为以下形式。

R(U,D,DOM,F)R(U,D,DOM,F)

可以看出,一个关系模式应当是一个五元组。其中,R为关系名;U为组成该关系的属性名集合;D为属性组U中属性所来自的域;DOM为属性向域的映像集合;F为属性间数据的依赖关系集合。属性间的数据依赖F将在第12章中进行讨论,而域名D及属性向域的映像DOM 常常直接说明为属性的类型、长度。因此,关系模式通常可简记为以下形式。

R(U)或R(A1,A2,...,An)R(U)或R(A_1,A_2,...,A_n)

其中,A1,A2,...,AnA_1,A_2,...,A_n为各属性名。

关系是关系模式在某一时刻的状态或内容。也就是说,关系模式是型,即关系头;而关系是值,即关系体。关系模式是关系的框架(或者称为表框架),是对关系结构的描述,它是静态的、稳定的;而关系是动态的、随时间不断变化的,它是关系模式在某一时刻的状态或内容,这是因为关系的各种操作在不断更新数据库中的数据。但在实际中,人们常常把关系模式和关系统称为关系,读者可以通过上下文加以区别。

例如,在第1章的表1~1至表1-5所示的教学数据库teaching中,共有5个关系,其关系模式可分别表示如下。

1
2
3
4
5
教师(教师号,姓名,性别,年龄,职称,工资,专业,院系)
学生(学号,姓名,性别,年龄,专业,院系)
课程(课程号,课程名,课时)
选课(学号果,成绩)
授课(教号程号,开课日期)

对于上述每个关系模式,又有其相应的实例。例如,在第1章的表1-1中,与教师关系模式对应的数据库中的实例如表2-5所示。

t1 刘杨 男 40 教授 3610.5 计算机 信息学院
t2 石丽 女 26 讲师 2923.3 信息 信息学院
t3 顾伟 男 32 副教授 3145 计算机 信息学院
t4 赵礼 女 50 教授 4267.9 自动化 工学院
t5 赵希希 女 36 副教授 3332.67 数学 理学院
t6 张刚 男 30 讲师 3012 自动化 工学院

2.2、关系数据库模式

在关系模型中,实体及实体间的联系都是用关系来表示的。例如,学生实体、课程实体、学生与课程之间的多对多联系都可以分别用一个关系来表示。在一个给定的应用领域中,所有实体及实体之间联系所对应的关系的集合构成一个关系数据库。

关系数据库也是有型和值之分的。关系数据库的型称为关系数据库模式,是对关系数据库的描述,它包括若干域的定义以及在这些域上定义的若干关系模式。因此,关系数据库模式是对关系数据库结构的描述,或者说是对关系数据库框架的描述。而关系数据库的值也称为关系数据库,是关系模式在某一时刻对应的关系的集合。也就是说,与关系数据库模式对应的数据库中的当前值就是关系数据库的内容,称为关系数据库的实例。

例如,第1章表1-1~表1-5所示的教学数据库teaching是5个关系的集合,或者说是5个关系头和5个关系体的集合。其中,各个关系头相对固定,而关系体的内容会随时间而变化。

三、关系的码和关系的完整性

3.1、候选码和主码

3.1.1、候选码

能唯一标识关系中元组的一个属性或属性集,称为候选码(Candidate Key),也称候选关键字或候选键,在后续章节中,统一称为候选码。例如,课程关系中的课程号能唯一标识每一门课程,则属性“课程号”是课程关系的候选码。在授课关系中,只有属性的组合“教师号+课程号”才能唯一地区分每一条授课记录,则属性集“教师号+课程号”是授课关系的候选码。

下面给出候选码的形式化定义。

设关系R有属性A1,A2,…,AnA_1, A_2, …, A_n,其属性集K=(A1,A2,…,Ak)K=(A_1, A_2, …, A_k),当且仅当满足下列条件时,K被称为候选码。

(1)唯一性(Uniqueness),关系R的任意两个不同元组,其属性集K的值是不同的。

(2)最小性(Minrum),组成关系键的属性集(A1,A2,…,Ak)(A_1, A_2, …, A_k)中,任一属性都不能从属性集K中删掉,否则将破坏唯一性的性质。

例如,选课关系中“学号+课程号”的组合是唯一的,同时,“学号+课程号”满足最小性,从中去掉任一属性,都无法唯一标识选课记录。

3.1.2、主码

如果一个关系中有多个候选码,可以从中选择一个作为查询、插入或删除元组的操作变量,被选用的候选码称为主码(Primary Key),或称为主关系键、主键、关系键、关键字等,后续章节中,统一称为主码。

列如,假设在学生关系中增加了一个属性“身份证号”,则“学号”和“身份证号”都可作为学生关系的候选码。如果选定“学号”作为数据操作的依据,则“学号”为主码。如果选定“身份证号”作为数据操作的依据,则“身份证号”为主码。

主码是关系模型中的一个重要概念。每个关系必须选择一个主码,选定以后,不能随意改变。

3.1.3、主属性与非主属性

主属性(Prime Attribute)是指包含在主码中的各个属性。非主属性(Non-Prime Attribute)是指不包含在任何候选码中的属性,也称为非码属性。

在最简单的情况下,一个候选码只包含一个属性,如学生关系中的“学号”,教师关系中的“教师号”,在最极端的情况下,所有属性的组合是关系的候选码,这时称为全码(All-key)。

3.2、外码

如果关系R2R_2的一个或一组属性X不是R2R_2的主码,而是另一关系R1R_1的主码,则该属性或属性组X称为关系R2R_2的外码(Foreign Key)或外部关系键(在后续章节中统一称为外码),并称关系R2R_2为参照关系(Referencing Relation),关系R1R_1为被参照关系(Referenced Relation)。

例如,第1章表1-4所示的选课关系sc中的字段“学号” (sno)和“课程号” (cno)分别是学生关系s和课程关系c中的主码,则在选课关系sc中,sno和cno称为外码。这时,选课关系sc称为参照关系,学生关系s和课程关系c称为被参照关系。

由外码的定义可知,被参照关系的主码和参照关系的外码必须定义在同一个域上。如选课关系sc中的外码sno与学生关系s中的主码sno要定义在同一个域上,同理,其外码cno与课程关系c的主码cno也要定义在同一个域上。

3.3、关系的完整性

为了维护关系数据库中数据与现实世界的一致性,对关系数据库的插入、删除和修改操作必须有一定的约束条件,这些约束条件实际上是现实世界的要求。任何关系在任何时刻都要满足这些语义约束。

关系模型中,有3类完整性约束,即实体完整性(Entity Integrity)、参照元整性(Referential Integrity)和用户自定义完整性(User-defined Integrity)。其中,实体完整性和参照完整性是关系模型必须满足的完整性约束条件,称作关系的两个不变性。任何关系数据库系统都应该支持这两类完整性。除此之外,不同的关系数据库系统由于应用环境的不同,往往还需要一些特殊的约束条件,这就是用户自定义完整性,用户自定义完整性体现了具体领域中的语义约束。

3.3.1、实体完整性

实体完整性是指主码的值不能为空或部分为空。

关系模型中的一个元组对应一个实体,一个关系则对应一个实体集。例如,一条课程记录对应一门课程,课程关系对应课程的集合。现实世界中的实体是可区分的,即它们具有某种唯一性标识。与此相对应,关系模型中以主码来唯一标识元组。例如,课程关系中的主码“课程号”(cno)可以唯一标识一门课程实体。如果主码中的值为空或部分为空,即主属性为空,则不符合关系键的定义条件,不能唯一标识元组及与其相对应的实体。这就说明存在不可区分的实体,从而与现实世界中的实体可以区分的事实相矛盾。因此,主码的值不能为空或部分为空。

例如,课程关系中的主码“课程号”不能为空,授课关系中的主码“教师号+课程号”不能部分为空,即“教师号”和“课程号”两个字段的取值都不能为空。

3.3.2、参照完整性

如果关系R2R_2的外码X与关系R1R_1的主码相符,则X的每个值,或者等于R1R_1中主码的某一个值,或者取空值。

例如,在图2-1中,学生关系s的字段“院系” (dept)与院系关系d的主码“院系” (dept)相对应,因此,学生关系s的字段dept是该关系的外码,学生关系s是参照关系,院系关系d是被参照关系。学生关系中某个学生(如s1)“院系”的取值,必须在院系关系中主码“院系”的值中能够找到,否则表示把该学生分配到一个不存在的院系,这显然不符合语义。如果某个学生(如s9)“院系”取空值,则表示该学生尚未分配到任何一个院系;否则,它只能取院系关系中某个元组的院系值。

再如,如果按照参照完整性规则,选课关系sc中的外码“学号”和“课程号”可以取空值或者取被参照关系中已经存在的值,但由于“学号+课程号”是选课关系中的主码,根据实体完整性规则,两个属性都不能为空,所以选课关系中的外码“学号”和“课程号”只能取被参照关系中已经存在的值。

3.3.3、用户自定义完整性

用户自定义完整性是针对某一具体关系数据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求。例如,属性值根据实际需要,要具备一些约束条件,如规定选课关系中成绩属性的取值在0到100之间。又如,某些数据的输入格式要有一些限制等。关系模型应该提供定义和检验这类完整性的机制,以便用统一的、系统的方法处理它们,而不要由应用程序承担这一功能。

四、小结

本章介绍了域和笛卡儿积的概念,给出了关系和关系模式的形式化定义,讲述了关系的性质,指出了关系、二维表之间的联系。本章还系统地介绍了关系数据库的一些基本概念,其中包括关系的码、关系模型的数据结构、关系的完整性约束。

五、参考

《数据库原理及应用教程(MySQL版)》

《数据库系统原理 自考04735》


数据库原理:关系数据库
https://kuberxy.github.io/2024/06/02/数据库原理2:关系数据库/
作者
Mr.x
发布于
2024年6月2日
许可协议