数据库原理:关系数据库
本章介绍关系的定义和性质、关系模式和关系数据库模式,以及关系的码和关系的完整性。
本章学习目标:了解域和笛卡儿积的概念;掌握关系的性质; 掌握关系模式的概念和性质;掌握关系的码、关系模型的数据结构、关系的完整性约束。
一、关系的形式化及性质
1.1、关系的形式化定义
1.1.1、域
域(Domain)是一组具有相同数据类型的值的集合,又称为值域(用D表示)。例如,整数、实数和字符串的集合都是域。域中所包含的值的个数称为域的基数(用m表示)。例如,以的教师关系t为例:
其中,D1、D2、D3,分别表示教师关系中的姓名域、性别域和年龄域。
1.1.2、笛卡儿积
给定一组域, ,…,(它们包含的元素可以完全不同,也可以部分或全部相同),其笛卡儿积(Cartesian Product)为
笛卡儿积是一个集合。对于笛卡儿积,有以下几点需注意。
(1)每一个元素中的每一个值叫作一个分量(Component),分量来自相应的域。
(2)每一个元素叫作一个n元组(n-Tuple),简称元组(Tuple)。但元组是有序的,相同分量的不同排序所构成的元组不同。例如,以下3个元组是不同的: (1, 2, 3) ≠ (2, 3, 1) ≠ (1, 3, 2)。
(3)若为有限集,中的集合元素个数称为的基数,用表示,则笛卡儿积的基数M[即元组的个数]为所有域的基数的累乘之积。例如,上述教师关系中的姓名域和性别域的笛卡儿积为={(刘杨,男),(刘杨,女),(石丽,男),(石丽,女),(顾伟,男),(顾伟,女),(赵礼,男),(赵礼,女),(赵希希,男),(赵希希,女),(张刚,男),(张刚,女)}。其中,刘杨、石丽、顾伟、赵礼、赵希希、张刚、男、女都是分量,(刘杨,男)、(刘杨,女)等是元组,的基数,即集合中元组的个数为12。
(4)笛卡儿积可用二维表的形式表示。例如,笛卡儿积D1xD2可表示为下表。
tn | sex |
---|---|
刘杨 | 男 |
刘杨 | 女 |
石丽 | 男 |
石丽 | 女 |
顾伟 | 男 |
顾伟 | 女 |
赵礼 | 男 |
赵礼 | 女 |
赵希希 | 男 |
赵希希 | 女 |
张刚 | 男 |
张刚 | 女 |
可以看出,笛卡儿积是集合,集合也可以用二维表来表示,表的每一列由对应的域构成,表的每一行就是集合的一个元组。
1.1.3、关系
笛卡儿积的任一子集称为定义在域上的n元关系(Relation),可用表示。其中,R表示关系的名字,n是关系的目或度(Degree)。例如,笛卡儿积的某个子集可以构成教师关系T1,如下表所示。
tn | sex |
---|---|
刘杨 | 男 |
石丽 | 女 |
顾伟 | 男 |
赵礼 | 女 |
赵希希 | 女 |
张刚 | 男 |
下面是几点说明。
(1)在关系R中,n=1为单元关系,n=2为二元关系,以此类推。例如,教师关系为二元关系。
(2) 关系中的元组常用t表示,关系中元组个数是关系的基数。例如,教师关系的基数为6。
(3)关系中的不同域(列)的取值可以相同,为了加以区别,必须对每个域(列)起一个名字,称为属性,n元关系必有n个属性,属性的名字唯一;属性的取值范围称为值域,等价于对应域的取值范围。具有相同关系框架的关系称为同类关系。
(4)在数学上,关系是笛卡儿积的任意子集,但在实际应用中,关系是笛卡儿积中所取的有意义的子集。例如,上表就是一个有意义的子集。
从关系模型的角度,关系可进一步定义如下。
定义在域(不要求完全相异)上的关系由关系头(Heading)和关系体(Body)组成。
关系头由属性名的集合组成,每个属性对应一个域。关系头(关系框架)是关系的数据结构的描述,它是固定不变的。关系体是指关系结构中的内容或者数据,它随元组的插入、删除或修改而变化。
1.2、关系的性质
在关系模型中,关系具有以下性质。
(1)列是同质的,即每一列中的分量必须来自同一个域,必须是同一类型的数据。
(2)不同的属性可来自同一个域,但不同的属性必须有不同的名字。例如,假设某关系中有两个属性“职业”和“兼职”,它们可以来自同一个域{教师,工人,辅导员}。
(3)列的顺序可以任意交换。但交换时,应连同属性名一起交换,否则将得到不同的关系。
(4) 关系中元组的顺序(即行序)可任意,在一个关系中可以任意交换两行的次序。因为关系是以元组为元素的集合,而集合中的元素是无序的,所以作为集合元素的元组也是无序的。
(5)关系中不允许出现相同的元组。因为数学上集合中没有相同的元素,而关系是元组的集合,所以作为集合元素的元组应该是唯一的。
(6)关系中每一分量必须是不可分的数据项,也就是说,不能出现“表中有表”的现象。满足此条件的关系称为规范化关系,否则称为非规范化关系。
例如,下表1是非规范化关系。可以把其中的属性“籍贯”分成两个新的属性,即“省”、“市/县”,将其规范化,如下表2所示。
表1:非规范化关系
姓名 | 籍贯 | 籍贯 |
---|---|---|
省 | 市 / 县 | |
张强 | 吉林 | 长春 |
王丽 | 山西 | 大同 |
表2:规范化关系
姓名 | 省 | 市 / 县 |
---|---|---|
张强 | 吉林 | 长春 |
王丽 | 山西 | 大同 |
二、关系模式与关系数据库模式
2.1、关系模式
关系数据库中,关系模式是型,关系是值。关系模式(Relation Schema)是对关系的描述。
关系的描述称为关系模式。它可以形式化地表示为以下形式。
可以看出,一个关系模式应当是一个五元组。其中,R为关系名;U为组成该关系的属性名集合;D为属性组U中属性所来自的域;DOM为属性向域的映像集合;F为属性间数据的依赖关系集合。属性间的数据依赖F将在第12章中进行讨论,而域名D及属性向域的映像DOM 常常直接说明为属性的类型、长度。因此,关系模式通常可简记为以下形式。
其中,为各属性名。
关系是关系模式在某一时刻的状态或内容。也就是说,关系模式是型,即关系头;而关系是值,即关系体。关系模式是关系的框架(或者称为表框架),是对关系结构的描述,它是静态的、稳定的;而关系是动态的、随时间不断变化的,它是关系模式在某一时刻的状态或内容,这是因为关系的各种操作在不断更新数据库中的数据。但在实际中,人们常常把关系模式和关系统称为关系,读者可以通过上下文加以区别。
例如,在第1章的表1~1至表1-5所示的教学数据库teaching中,共有5个关系,其关系模式可分别表示如下。
1 |
|
对于上述每个关系模式,又有其相应的实例。例如,在第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有属性,其属性集,当且仅当满足下列条件时,K被称为候选码。
(1)唯一性(Uniqueness),关系R的任意两个不同元组,其属性集K的值是不同的。
(2)最小性(Minrum),组成关系键的属性集中,任一属性都不能从属性集K中删掉,否则将破坏唯一性的性质。
例如,选课关系中“学号+课程号”的组合是唯一的,同时,“学号+课程号”满足最小性,从中去掉任一属性,都无法唯一标识选课记录。
3.1.2、主码
如果一个关系中有多个候选码,可以从中选择一个作为查询、插入或删除元组的操作变量,被选用的候选码称为主码(Primary Key),或称为主关系键、主键、关系键、关键字等,后续章节中,统一称为主码。
列如,假设在学生关系中增加了一个属性“身份证号”,则“学号”和“身份证号”都可作为学生关系的候选码。如果选定“学号”作为数据操作的依据,则“学号”为主码。如果选定“身份证号”作为数据操作的依据,则“身份证号”为主码。
主码是关系模型中的一个重要概念。每个关系必须选择一个主码,选定以后,不能随意改变。
3.1.3、主属性与非主属性
主属性(Prime Attribute)是指包含在主码中的各个属性。非主属性(Non-Prime Attribute)是指不包含在任何候选码中的属性,也称为非码属性。
在最简单的情况下,一个候选码只包含一个属性,如学生关系中的“学号”,教师关系中的“教师号”,在最极端的情况下,所有属性的组合是关系的候选码,这时称为全码(All-key)。
3.2、外码
如果关系的一个或一组属性X不是的主码,而是另一关系的主码,则该属性或属性组X称为关系的外码(Foreign Key)或外部关系键(在后续章节中统一称为外码),并称关系为参照关系(Referencing Relation),关系为被参照关系(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、参照完整性
如果关系的外码X与关系的主码相符,则X的每个值,或者等于中主码的某一个值,或者取空值。
例如,在图2-1中,学生关系s的字段“院系” (dept)与院系关系d的主码“院系” (dept)相对应,因此,学生关系s的字段dept是该关系的外码,学生关系s是参照关系,院系关系d是被参照关系。学生关系中某个学生(如s1)“院系”的取值,必须在院系关系中主码“院系”的值中能够找到,否则表示把该学生分配到一个不存在的院系,这显然不符合语义。如果某个学生(如s9)“院系”取空值,则表示该学生尚未分配到任何一个院系;否则,它只能取院系关系中某个元组的院系值。
再如,如果按照参照完整性规则,选课关系sc中的外码“学号”和“课程号”可以取空值或者取被参照关系中已经存在的值,但由于“学号+课程号”是选课关系中的主码,根据实体完整性规则,两个属性都不能为空,所以选课关系中的外码“学号”和“课程号”只能取被参照关系中已经存在的值。
3.3.3、用户自定义完整性
用户自定义完整性是针对某一具体关系数据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求。例如,属性值根据实际需要,要具备一些约束条件,如规定选课关系中成绩属性的取值在0到100之间。又如,某些数据的输入格式要有一些限制等。关系模型应该提供定义和检验这类完整性的机制,以便用统一的、系统的方法处理它们,而不要由应用程序承担这一功能。
四、小结
本章介绍了域和笛卡儿积的概念,给出了关系和关系模式的形式化定义,讲述了关系的性质,指出了关系、二维表之间的联系。本章还系统地介绍了关系数据库的一些基本概念,其中包括关系的码、关系模型的数据结构、关系的完整性约束。