数据库原理:关系数据库

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

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

一、关系的形式化及性质

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=6D_3=\{26, 30, 32, 36, 40, 50\}, m_3=6。

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

1.1.2、笛卡儿积

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

D1D2...Dn={(d1,d2,...,dn)diDi,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),分量来自相应的域(diDi)(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)表示,则笛卡儿积D1D2...DnD_1*D_2*...*D_n的基数M[即元组(d1,d2,,dn)(d_1, d_2, …, d_n)的个数]为所有域的基数的累乘之积。例如,上述教师关系中的姓名域D1D_1和性别域D2D_2的笛卡儿积为D1D2D_1 * D_2={(刘杨,男),(刘杨,女),(石丽,男),(石丽,女),(顾伟,男),(顾伟,女),(赵礼,男),(赵礼,女),(赵希希,男),(赵希希,女),(张刚,男),(张刚,女)}。其中,刘杨、石丽、顾伟、赵礼、赵希希、张刚、男、女都是分量,(刘杨,男)、(刘杨,女)等是元组,D1D2D_1 * D_2的基数M=m1m2=62=12M=m_1*m_2=6 * 2=12,即集合中元组的个数为12。

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

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

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

1.1.3、关系

笛卡儿积D1D2...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)。例如,笛卡儿积D1D2D_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日
许可协议