2.1 关系模型概述
【案例2-1】关系模型的提出。1970年E.F. Codd在美国计算机学会会刊《Communications of the ACM》上发表了题为A Relational Model of Data for Shared Data Banks的论文,首次系统地提出了关系模型的相关理论,该论文和他后续发表的多篇论文奠定了关系数据的理论基础。E.F.Codd也因其杰出贡献,于1981年获得ACM图灵奖。
2.1.1 关系模型的基本概念
关系模型是近50年来最重要、应用最广泛的数据库模型,大型数据库如Oracle、DB2、SQL Server和Sybase等都是基于关系模型设计研发的,其数据结构可统一用一张二维表来表示现实世界中的实体与实体之间的联系。
1.关系及关系模型的常用概念
下面对关系模型中最常用的重要概念进行逐一解释。
1)关系。关系是一张二维表,它表示数据的逻辑结构,将现实世界中实体之间的联系归结为简单的二维关系,其中,表中的每一行代表一个元组(记录),每一列代表一个域(属性),可以用下面更一般的形式定义。
D1×D2×...×Dn的子集称为域D1,D2,…,Dn上的关系,表示为R(D1,D2,…,Dn),其中R表示关系名,n是关系的目或度。
2)元组、属性。在关系模型中,二维表(关系)中的行称为元组(或称为记录)。二维表的列称为属性。每个属性对应表中的一个字段,属性名也就是字段名,属性值为各行的字段值。
3)域。域(Domain)是一组具有相同数据类型值的集合。用域表示属性的取值范围,属性A的域可以用DOM(A)表示,每个属性对应一个域,不同的属性可以对应同一个域。
【案例2-2】不同域示例。D1={1,2,3,4,5,6,...}表示自然数集合。D2={男,女}表示性别集合。D3={星期一,星期二,星期三,星期四,星期五,星期六,星期日}表示一周中各天名称的集合。
4)关系模型。关系模型(Relation Model)是指以二维表结构表示的实体关系,用键表示实体间联系的数据模型,其中键唯一标识一个元组,并且键可以是单一属性或属性的组合。
关系模型由关系数据结构、关系操作集合和关系完整性约束3部分组成。关系模型是关系数据库的构建基础,所有关系数据库都支持关系模型。在关系模型中,无论实体还是实体之间的联系均用二维表结构表示,即用关系呈现,每个关系对应一张二维表。例如,学生实体用学生关系表示,见【案例2-3】。
【案例2-3】学生信息表。学生信息表包含以下信息:学号、姓名、性别、专业、出生日期和家庭地址。表头表示关系型,从第二行开始以下各行都是一个关系型的实例,如表2-1所示。
表2-1 学生信息表
5)元数和基数。元数是指关系中属性的个数。基数是指元组的个数。表2-1所示的关系的元数和基数分别为6和5。
2.键、主键和外键
键也称为码,在关系中由唯一可标识元组的属性或属性组合构成,如学生的学号、公民的身份证号等。
1)候选键。若关系表中的某一属性或属性组合的值可唯一确定一个元组,则称该属性或属性组为候选码。
2)主键。主键(primary key)是在候选键中选定一个键作为元组标识,称为主键。一般情况下,若不加以说明,键指主键(码),如果关系中有多个候选键,可取其中一个作为该关系的主键,主键不允许为空值(非零和空格)。
3)外键。外键是指若在关系R中包含另一个关系S的主键所对应的属性或属性组K,则称K为R的外键(码)。
注意:外键表示的是另一个关系的主键,但不是本关系的主键。关系数据库的表间关系需要借助外键来建立。此外,外键需要满足外键约束条件,也就是说外键要么为空值,要么是另外一个关系已存元组的主键。
关系模型中主键和外键为现实世界中实体之间的联系建立了桥梁。基本关系R称为参照关系,基本关系S称为被参照关系或目标关系。
2.1.2 关系的类型与性质
关系有3种类型:基本关系(又称为基本表或基表)、查询表和视图表。基本表是实际存在的表,是实际存储数据的逻辑表示。查询表是查询结果对应的表。视图表是由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据。
基本关系有以下6条性质。
1)关系中的列是同质的(Homogeneous),也就是说每一列中的分量是同一类型的数据,也可以说具有相同的域。
2)不同的列可以来自同一域,即列的类型相同,不同的列要给予不同的列名(属性名)加以区分,表明是不同的列。
3)关系中的列没有先后顺序之分,即列的次序可以任意交换。
4)任意元组的候选码不能相同,也就是说任意两行元组不能完全相同,如果完全相同则说明数据存在重复,会造成存储空间的浪费和查询统计结果的不一致或错误。因此,数据库中应该避免元组的重复现象,保证实体的唯一性和完整性。
5)关系中任意两行元组的次序是可以交换的,即元组无先后顺序之分。
6)关系中的属性(列)必须是原子值,即每个属性都必须是不可分的数据项。
关系模型要求关系必须是规范化的,即要求关系必须满足必要的规范条件。这些规范条件中最基本的一条是,关系的每一个分量必须是一个不可分的数据项。
比较【案例2-3】和【案例2-4】中学生信息表的“出生日期”属性的设计,【案例2-3】中的“出生日期”使用一个日期类型的数据进行存储,该属性不可分,而【案例2-4】中的“出生日期”包含小表,即出生日期由年、月、日3分部分组成,虽然看上去更清晰,但是该属性设计与关系中属性必须是原子值(不可再分)的原则相冲突,是一种不恰当和不规范的关系数据库设计。
【案例2-4】学生信息表。学生信息表包含以下信息:学号、姓名、性别、专业、出生日期(年、月、日)和家庭地址。表头表示关系型,从第二行开始以下各行都是一个关系型的实例,如表2-2所示。
表2-2 学生信息表
2.1.3 关系模式的表示
关系模式(Relation schema)是对关系的描述,可形式化地表示如下。
R(U,D,DOM,F)
其中R为关系名,U为组成该关系的属性(列)名集合,D为属性组U中属性所来自的域,DOM为属性域的映像集合,F为属性间数据的依赖关系集合。
关系模式通常可以简记为R(U)或R(A1,A2,…,An),其中R为关系名,A1,A2,…,An为属性名。例如,学生关系的关系模式(数据表)可表示为:
学生(学号,姓名,性别,专业,出生日期,家庭地址)
关系模式是对关系的描述,关系模式主要描述两方面的内容。
1)关系模式指明关系二维表中元组集合的结构,也就是它由哪些属性构成,这些属性来自哪些域(在具体的关系数据库中体现为属性的数据类型和长度),以及属性与域之间的映射关系。
2)关系模式应该说明属性间的相互关联关系和属性本身的约束条件。对于属性的约束条件,可以通过以下两个示例体现。例1,男性职工年龄一般小于60岁(60岁以后退休,当前实行延迟退休的男性职工除外);例2,百分制成绩必须为0~100。对于属性间的相互关联关系具体表现为外键,在以后的章节中将详细说明。
2.1.4 E-R图与关系模型之间的转换
1.转换规则
E-R图由实体、实体的属性和实体间的联系3个要素组成,而关系模型是用二维表呈现现实世界中实体之间的联系,即关系模式集合,所以将E-R图转换为关系模型,就是将E-R图转换成关系模式集合的过程。实体类型和二元联系类型的转换规则如下。
1)实体转换关系规则。将每一个实体转换成一个关系模式时,实体的属性就是关系的属性,实体的标识符就是关系的键,如【案例2-3】中的学生信息实体的学号为关系模式中的键。
2)二元联系类型的转换规则如下。①若实体间的联系为一对一(1:1),则将两个实体类型转换成两个关系模式的过程中,任选一个属性或属性组在其中加入另一个关系模式的键和联系类型的属性。②若实体间的联系是一对多(1:n),则在多的一端实体的关系模式中,加上一的一端实体类型的键和联系类型的属性。③若实体间的联系是多对多(m:n),则将联系类型也转换为关系模式,其属性为两端实体类型的键加上联系类型的属性,而键为两端实体键的组合。
2.转换方法
下面分别对一对一(1:1)、一对多(1:n)和多对多(m:n)3种情况的联系转换方法举例说明。
【案例2-5】每个学生只有一个身份证,每个身份证只属于一个学生,学生和身份证之间的关系为一对一关系。学生与身份证实体关系图如图2-1所示。在学生端加入身份证号作为联系属性,在两者之间建立一对一关系。
学生(学号,身份证号,姓名,性别,专业,出生日期,家庭地址),其中学号为主键(PK),身份证号为外键(FK),关联到关系身份证。
身份证(身份证号,签发机关,有效期始,有效期止),身份证号为主键。
1)一对一联系的转换方法。
2)一对多联系的转换方法。
方法一:将联系与多的一端实体所对应的关系模式合并,加上一的一端实体的主键和联系的属性。
方法二:将联系转换为一个独立关系模式,其属性包含联系自身的属性及相连接的两端实体的主键。
【案例2-6】订单和订单项之间的一对多关系。每一个订单包含一个或多个订单项,同时,一个或多个订单项组成一个订单。订单和订单项的关系定义如下。订单和订单项的E-R图如图2-2所示。
订单表(订单ID,会员ID,是否付款,运送方式,运费,提交时间)。
订单项表(订单项ID,订单ID,商品ID,商品数量)。
图2-1 学生与身份证实体关系图
图2-2 订单与订单项一对多联系
3)多对多联系的转换方法。
对于实体之间是多对多的联系情况,各个实体可以直接转换为关系模式,联系则独立转换为一个关系模式,其属性包括联系自身的属性和相连各实体的主键。
图2-3 学生选课关系多对多E-R图
【案例2-7】学生选课联系。一个学生可以选多门课程,一门课程可以被多个学生选修,学生的选课联系是多对多的联系。在转换过程中,将学生实体和课程实体转换为相应的独立关系模式,同时选课联系转换为一个单独的关系模式。其E-R图如图2-3所示。具体的关系模式如下。
学生(学号,身份证号,姓名,性别,专业,出生日期,家庭地址),其中学号为主键(PK)。
课程(课程代码,系部编号,学期,课程名称,课程类型,学分),其中课程代码为主键。
学生选课(学号,课程代码,成绩),学号和课程代码为组合主键,学号外键,课程代码为外键。
讨论思考:
1)什么是关系模式?它的形式化表示是什么?
2)关系应该具有哪些性质?