第2章
数据模型
数据模型(Data Model)是数据抽象的工具,根据数据抽象的3个层次,数据模型分为概念数据模型、逻辑数据模型和物理数据模型。物理数据模型是指具体的DBMS在实现其支持的逻辑数据模型时,所用到的具体的物理存储结构。物理数据模型在数据库应用系统的开发中较少涉及,因此本章不做讨论。
2.1 数据模型三要素
数据模型是对数据、数据的特征以及数据之间联系的模拟、组织和抽象。数据模型是数据库系统的基础和核心,是数据库的框架,这个框架表示了信息及其联系的组织和表达方式,同时反映了存取路径,是对数据库如何组织的一种模型化表示。
数据模型有型和值的概念。型是对数据库中全体数据的逻辑结构和属性的描述,称为数据模式。值是型的一个具体值,称为实例。同一数据模式可以有很多实例。
重要提示
- 通常情况下,对数据库模式、数据模式、数据库系统模式不做区分,它们本质上是相同的,都属于型,是一种框架、结构,相对稳定、变化不大,只是针对不同场合给出的不同叫法。
- 数据库模式以某一种数据模型为基础,若以关系模型为基础,数据库模式就称为关系模式。
数据模型可以精确描述系统的静态特征、动态特征以及完整性约束条件。静态特征是指数据结构;动态特征是指数据操作,包括查询、插入、删除和修改等操作;完整性约束条件是指对数据的约束条件。通常,将数据模型定义为一组面向计算机的概念集合,即数据模型的三要素:数据结构、数据操作、数据约束。
1. 数据结构
数据库对象包括数据和数据之间的联系。数据结构是数据库对象类型的集合,它描述数据的静态特征,即数据本身以及数据之间的联系。数据本身包括数据的类型、内容、特征等。
2. 数据操作
数据操作是一组定义在数据上的操作,通常包括查询、插入、删除、修改。数据操作描述的是数据的动态特征。数据模型要定义操作的含义、操作符、运算规则,以及实现操作的语言。
3. 数据约束
约束条件用于描述对数据的约束,包括数据本身的完整性和数据之间联系的约束。约束条件的主要目的是使数据库与它所描述的现实世界相符合,因此,约束条件是数据库中数据必须满足的完整性规则的集合。
约束条件是对数据静态特征和动态特征的限定,以保证数据库中数据的正确、有效和安全。比如,对性别属性的约束条件是性别的取值只能是“男”或者“女”。
2.2 数据模型的分类
按照不同的应用层次和抽象级别的由高到低,将数据模型依次划分为概念数据模型、逻辑数据模型和物理数据模型。概念数据模型主要用于数据库的设计,逻辑数据模型主要用于DBMS的实现。
数据模型是对现实世界特征的模拟和抽象,主要通过以下两个步骤完成将抽象组织成数据模型的过程,如图2-1所示。
1)将现实世界抽象为信息世界。通过对现实世界中的事物或现象及它们之间联系的概念化抽象,形成了信息世界中的概念模型。
2)将信息世界抽象为计算机世界。即将概念模型转换为计算机能接受的(逻辑)数据模型。通常将逻辑数据模型简称为数据模型。
2.2.1 概念数据模型
概念数据模型(Conceptual Data Model,CDM)也称信息模型,它面向现实世界建模,按照用户的观点对数据进行描述,是面向用户的模型。
CDM对现实世界中的事物和特征进行数据抽象,只关心现实世界中的事物、事物的特征以及联系,与具体的DBMS和具体的计算机平台无关。CDM强调语义表达,描述信息结构,是对现实世界的第一层抽象,也是系统分析员、程序设计员、维护人员、用户之间进行交流的语言。常用的概念数据模型是实体–联系模型,简称E-R模型,详细内容参见2.3节。概念模型必须转换成逻辑数据模型才能在DBMS中实现,将概念模型转换为逻辑模型的相关内容将在本书第二部分第4章的4.3节中进行介绍。
2.2.2 逻辑数据模型
概念数据模型是概念上的抽象,它与具体的DBMS无关。而逻辑数据模型(Logical Data Model,LDM)与具体的DBMS有关,它直接面向数据库的逻辑结构。通常将逻辑数据模型简称为数据模型。如无特殊说明,从本小节开始,所提到的数据模型均指逻辑数据模型。
逻辑数据模型也称结构数据模型(Structural Data Model),它是用户通过数据库直接感知的数据模型,是计算机实际支持的数据模型,与具体的DBMS有关。通常,DBMS只支持一种LDM。
LDM按照计算机系统的观点对数据进行描述,包括描述数据库中数据的表示方法和数据库结构的实现方法。目前对LDM的分类主要包括四种:层次模型(Hierarchical Model)、网状模型(Network Model)、关系模型(Relational Model)和面向对象模型(Object-Oriented Model)。面向对象模型目前仍处于发展中,它具有丰富的表达能力,但模型相对复杂且涉及知识较多,本小节因篇幅所限不做详细介绍。
1. 层次模型
层次模型是最早出现的数据模型,它采用层次数据结构来组织数据。层次模型可以简单、直观地表示信息世界中实体、实体的属性以及实体之间的一对多联系。它使用记录类型来描述实体,使用字段来描述属性,使用结点之间的连线表示实体之间的联系。
层次数据结构也称树形结构,树中的每个结点代表一种记录类型。上层记录(称为父记录或父结点)可能同时拥有多个下层记录(称为子记录或子结点),而下层记录只能有唯一的上层记录。满足以下两个条件的数据模型称为层次模型。
1)只有一个结点没有父结点,称该结点为根结点。
2)根结点以外的其他结点有且只有一个父结点。
层次模型可以自然地表示家族结构、行政组织结构等。图2-2给出了一个层次模型的示例,表示了4个实体、3个基本层次的一对多联系。
层次模型的三要素包括:
1)数据结构:使用记录类型表示实体,使用结点之间的连线表示一对多的联系。
2)数据操作:包括结点的查询和结点的更新(如插入、删除和修改)操作。
3)完整性约束:一个模型只有一个根结点,其他结点只能有一个双亲结点,结点之间是一对多的联系。
层次模型的优点是结构简单、清晰,容易理解,结点之间的联系简单,查询效率高。缺点主要有以下几点:
1)不能表示一个结点有多个双亲的情况。
2)不能直接表示多对多的联系,需要将多对多联系分解成多个一对多的联系。常用的分解方法是冗余结点法和虚拟结点法。
3)插入、删除限制多。比如,如果删除父结点则相应的子结点也被同时删除等。相关内容可参考“数据结构”课程中树的相关操作。
4)必须经过父结点才能查询子结点,因为在层次模型中,没有一个子结点的记录值能够脱离父结点的记录值而独立存在。
2. 网状模型
层次模型只能通过父子关系表示数据之间的关系,而网状模型能够直接描述一个结点有多个父结点以及结点之间为多对多联系的情形。网状模型采用网状结构,使得每个子记录可以同时拥有多个父记录,是满足以下两个条件的层次结构的集合。
1)允许有一个以上的结点无父结点。
2)一个结点可以有多于一个的父结点。
实际上,层次模型是网状模型的一个特例。网状模型去掉了层次模型中的限制,允许多个结点没有父结点,允许结点有多个父结点,还允许结点之间存在多对多的联系。图2-3给出了使用网状模型表示学生和课程之间多对多联系的示例。
网状模型中子结点与父结点的联系可以不唯一,但需要为每个联系进行命名,图2-3a中成绩结点有两个父结点:课程和学生。将课程与成绩的联系命名为“课程–成绩”,将学生与成绩的联系命名为“学生–成绩”。
网状模型的三要素包括:
1)数据结构:使用记录类型表示实体,使用字段描述实体的属性,每个记录类型可包含若干个字段,使用结点之间的连线表示一对多的联系。
2)数据操作:包括结点的查询和结点的更新操作。
3)完整性约束:支持码的概念,用于唯一标识记录的数据项的集合;保证一个联系中双亲结点与子结点之间是一对多联系;支持双亲记录和子女记录之间的某些约束条件,如只删除双亲结点等。
网状模型具有良好的性能,存取效率较高。相比层次模型,网状模型中结点之间的联系具有灵活性,能表示事物之间的复杂联系,更适合描述客观世界。网状模型虽然有效克服了层次模型不方便表达多对多联系的缺点,但由于复杂的网络关系使得数据结构的更新变得非常困难。此外,所提供的DDL语言复杂,不容易学习和掌握。
3. 关系模型
层次模型和网状模型的共同缺点是:缺乏被广泛接受的理论基础;对数据结构有很强的依赖性,即数据的独立性差;即使是简单的查询也必须编写复杂的程序,这是因为这两种模型是通过存取路径实现记录之间的联系的,应用程序在访问数据时必须选择适当的存取路径,不理解数据结构就无法进行相应的数据访问,这加重了编写应用程序的负担。此外,这两种模型均不支持集合处理,即没有提供一次处理多个记录的功能。
关系模型在1970年由IBM的E. F. Codd首次提出。关系模型解决了层次模型和网状模型的不足,不仅可以描述一对一、一对多和多对多的联系,而且消除了对数据结构的依赖,并向用户隐藏了存取路径,大大提高了数据的独立性以及程序员的工作效率。此外,关系模型建立在严格的数学概念和数学理论基础之上,支持集合运算。关系模型作为主流的逻辑数据模型,将在本章2.4节进行详细介绍。
2.2.3 物理数据模型
物理数据模型(Physical Data Model,PDM)是在计算机系统的底层对数据进行抽象,它描述数据在存储介质上的存储方式和存取方法,是面向计算机系统的数据模型。
PDM与具体的DBMS有关,还与DBMS所依赖的操作系统和硬件有关。每一种逻辑数据模型在实现时都有其对应的物理数据模型。大部分PDM的实现工作由系统自动完成,以保证PDM的独立性。
2.3 实体–联系模型
实体–联系(Entity-Relationship)数据模型,简称E-R模型,是最常用的概念模型,由P. P. Chen于1976年首先提出。E-R模型作为数据库设计人员与用户进行交流的语言,提供不受任何DBMS约束的面向用户的表达方法,作为数据建模工具被广泛用于数据库设计中。E-R模型将现实世界中用户的需求转化成实体、属性、联系等几个基本概念,并使用E-R图非常直观地表示出来。
2.3.1 E-R模型基本概念
1. 实体(Entity)
实体是概念世界中的基本单位,是客观存在且又能相互区别的事物。实体可以是物理存在的事物,如一名学生、一名教师、一所大学、一本书等;也可以是抽象的事物,如一门课程、一次借书、一场考试等。
2. 属性(Attribute)
实体具有若干特征,每个特征称为实体的一个属性。例如,每个学生实体都具有学号、姓名、年龄、性别等属性。
属性按照结构分为简单属性和复合属性。实体的属性值是数据库中存储的主要数据,一个简单属性实际上相当于数据表中的一个列。
简单属性是不可以再划分的属性,如性别、年龄等。复合属性是可以再划分为多个子属性的属性,如可以将属性“家庭地址”划分为省、市、区、街道名、门牌号等多个子属性。复合属性可以准确描述现实世界的复合信息结构,使用灵活,既可以将它作为整体处理,即作为一个属性(如家庭地址),也可以将它的各个子属性作为简单属性(如所在省、市、区、街道名、门牌号5个属性)。
属性按取值分为单值属性和多值属性。对于一个特定实体的属性,如果是单值属性,则只有一个属性值,比如学生的“学号”属性。如果是多值属性,则对应一组值,如学生的“学位”属性,其值可能是学士、硕士、博士三个值,也可能是其中的两个值。
3. 实体型(Entity Type)
实体型是对现实世界中各种事物的抽象,是对具有相同属性的一类实体的特征和性质的结构描述。通常使用实体名和属性名来抽象和刻画同类实体。例如,“学生(学号,姓名,性别,年龄)”就是一个实体型。一般来说,每个实体型相当于数据库中一张表的表结构。
4. 实体集(Entity Set)
若干同型实体的集合称为实体集,或者说,凡是有共性的实体组成的一个集合称为实体集。例如,理学院的学生、某大学开设的课程、某大学的教师、某大学某个专业的全体学生等都可以构成一个个实体集。
实体集由实体集名、实体型和实体三个部分组成。实体集名一般沿用实体型的名称。在实际应用中,一个实体型通常被抽象为一个实体集。在不强调个体的情况下,通常将实体型或实体集简称为实体。一个实体集相当于关系数据库中一张完整的数据表,包括表名、表结构和表中的数据(记录)。
5. 关键字、码或键(Key)
一个实体本身具有许多属性,能唯一标识实体集中每个实体的属性集合称为关键字(也称为码、键)。例如,学号可以作为学生实体集的关键字。一个实体集可以有若干个关键字,通常选择其中一个作为主关键字(也称为主码、主键,Primary Key)。
6. 域(Domain)
域是指属性的取值范围。例如,性别的域为集合{男,女}。
7. 联系(Relationship)
现实世界中事物之间或事物内部之间的关联称为联系,在E-R模型中反映为实体集内部的实体之间或实体集与实体集之间的相互关系。比如,某单位内部职工之间的上下级关系或因为共同的兴趣爱好而建立的队长和队员的关系等,都是实体之间的联系。又比如,医生与病人之间的治疗关系、旅客与高铁之间的乘坐关系、学生和课程之间的选修关系,这些都是实体集与实体集之间的联系。有些情形下联系也有自己的属性,比如,学生和课程之间“选修”这个联系的属性可以是“成绩”。
【例2-1】假设某大学的“教学管理”数据库中存储着学院、学生和课程的信息,并给出了下述说明,请定义实体型,并指出可能存在的联系。
大学设有很多学院,每个学院有学院编号、学院名、一名院长;一个学院有多个学生,而一个学生仅属于一个学院,每名学生具有学号、姓名、性别、出生日期、所在学院、班级;一个学生可以选修多门课程,而一门课程有多个学生选修,每门课程的信息包括课程号、课程名、所在学院、学分;一个学院可以开多门课,每门课只能由一个学院开设。
1)根据上述说明,可以定义如下3个实体型:
学院(学院编号,学院名,院长),其中,学院编号是关键字。
学生(学号,姓名,性别,出生日期,所在学院,班级),其中,学号是关键字。
课程(课程号,课程名,所在学院,学分),其中,课程号是关键字。
2)存在的联系包括:
实体集与实体集之间的联系:学生和学院之间的从属关系;学生和课程之间的选修关系;课程和学院之间的归属关系。
实体之间的联系:课程和课程之间的先修关系;学生和学生之间的组长与组员的关系等。
2.3.2 完整性约束
1. 所关联的实体集数目上的约束
按照所涉及的实体集数目,将联系分为一元联系、二元联系、三元联系、多元联系。“元”是指所关联的实体集的数目。
一元联系也称为递归联系,是指同一实体集内部实体之间的联系,比如,员工实体集中,有些员工是领导,有些员工是普通工作人员,他们之间存在一种“领导”联系。运动员之间的比赛名次也属于一元联系。
二元联系是指两个实体集之间的联系,如学生与课程之间的联系“选课”就是二元联系。
三元联系是指三个实体集之间的联系,如售货员、商品、顾客之间的“门市销售”联系就是三元联系。一个售货员可以将多种商品销售给一名顾客,也可以将一种商品销售给多名顾客;一名顾客的一种商品可以由多个售货员销售。
E-R模型允许联系连接任意多的实体集,但三元联系就已经比较复杂,所转换的关系模式可能会出现冗余现象,需要规范化理论进行处理。实际的数据库系统中,大多数联系都是二元联系。
2. 二元联系中实体数量上的约束
如图2-4所示,通常将两个实体集之间的联系分为三类:一对一联系、一对多联系和多对多联系。
(1)一对一联系
如果实体集A中的一个实体至多同实体集B中的一个(也可以没有)实体相联系,反之亦然,则称实体集A与实体集B具有一对一联系,记为1 : 1。例如,一个班级与一名班长、一个学校与一名正校长、行进中的司机与汽车。
(2)一对多联系
如果实体集A中的一个实体可以同实体集B中的n(n≥0)个实体相联系,而实体集B中的一个实体至多同实体集A中的一个实体相联系,则称实体集A与实体集B具有一对多联系,记为1 : n。例如,学院与教师的二元联系中,一个学院有多名教师;班级与学生的二元联系中,一个班级有多名学生;宿舍房间与学生的二元联系中,一个房间住多名学生。
(3)多对多联系
如果实体集A中的一个实体可以同实体集B中的n(n≥0)个实体相联系,而实体集B中的一个实体也可以同实体集A中的m(m≥0)个实体相联系,则称实体集A与实体集B具有多对多联系,记为m:n。例如,学生与课程的二元联系中,一个学生可以选修多门课,一门课可以有多个学生选修;教师与课程的二元联系中,一名教师可以教多门课,一门课可以由多名教师来教授。
重要提示
1.一对一联系是一对多联系的特例,一对多联系是多对多联系的特例。
2.联系的类型需要根据对所了解的现实世界的观察而确定,例如,教师和课程之间的联系通常是一对多,因为根据所了解的真实世界,一名教师可以教多门课,而一门课通常由一名教师来教。但是也要遵循具体的应用要求:如果规定一门课可以由多名教师来教,教师和课程之间的联系就是多对多;如果规定一名教师只能教一门课,而一门课只能由一名教师来教,那么教师和课程之间的联系就是一对一。
【例2-2】根据例2-1的描述,指出实体集之间的联系类型。
由例2-1中的描述可知:
1)一个学院有多名学生,而一名学生仅属于一个学院,因此,学院与学生之间是一对多联系。
2)一名学生可以选修多门课程,而一门课程可以有多名学生选修,因此,学生与课程之间是多对多联系。
3)一个学院可以开多门课,每门课只能由一个学院开设,因此,学院与课程之间是一对多联系。
3. 联系的属性位置约束
实体型有属性,联系本身也是一种实体型,也可以有属性。例如,学生和课程之间的“选修”联系可带有属性“成绩”,因为“成绩”既依赖于某名特定的学生又依赖于某门特定的课程,所以它是学生与课程之间“选修”联系中的属性;又比如,教师与学生的“教与学”联系可带有“教室”属性等。
对于实体集之间的m:n联系,其属性一般不移动到任何一方实体集中。例如,学生和课程是m:n的二元联系,“选修”联系中的属性“成绩”不能移动到学生和课程当中的任一实体集中,否则会产生多值属性;售货员、商品和顾客是m:n的三元联系,它们之间的“门市销售”联系中的属性“商品数量”不能移动到售货员、商品和顾客当中的任一实体集中。
对于1:1和1:n的联系,数据库设计者可以根据具体的应用将联系的属性移动到某个实体集中作为属性。具体做法如下:
1)如果实体集A和B之间的联系为1:1,则联系的属性既可以移动到实体集A中,也可以移动到实体集B中。
2)如果实体集A和B之间的联系为1:n,则联系的属性可以移动到与n对应的实体集B中。
4. 码约束
(1)实体集的码
码是实体集的性质,不是单个实体的性质。码可以由多个属性组成,一个实体集可以有多个码,但通常只选择其中的一个作为主码。码的指定实际上代表了被建模的现实世界中的约束。
在一个实体集中,不允许任意两个实体在码属性上具有相同的值。例如,如果将“学号”作为“学生”实体集的主码,就表示不同的学生有不同的学号。
(2)联系集的码
联系是指实体之间的相互关联,联系集是指同类联系的集合,是实体集之间的相互关联。实际中,通常不区分联系与联系集。
同实体集一样,对于联系集而言,也需要一种机制来区分联系集中的不同联系。在m:n联系集中,它的主码由参与联系集的所有实体集的主码构成。在1:n联系集中,它的主码由参与联系集的“多”方实体集的主码构成。在1:1的联系集中,它的主码由参与联系集的任一方的实体集的主码构成。
5. 域约束
域约束是指属性值必须取自一个有限集的约束。比如,将学院名属性的类型声明规定为枚举类型,或者规定成绩属性的取值范围为0到100之间的整数。
6. 其他约束
比如,对实体集中可被联系的实体数目的约束。假设规定每个学生选修的课程数目不超过40门,在E-R模型中可以在联系到实体集的连线上加上约束条件,如图2-5所示。
2.3.3 E-R图
E-R图是E-R模型的一种图形化表示,具有简单性和清晰性。E-R图提供了表示实体型、属性和联系的方法,用来描述现实世界的概念模型。
1. E-R图的三个要素
1)实体(集、型):使用矩形表示,框内标注实体名称。
2)属性:使用椭圆表示,并用无向边将其与相应的实体连接起来。
3)实体之间的联系:使用菱形框表示,框内注明联系名称,并用无向边分别与相关的实体连接起来,同时在无向边旁标上联系的类型(1:1、1:n或m:n)。如果一个联系具有属性,则这些属性也要用无向边与该联系连接起来。
2. 联系的表示方法
使用图形表示两个实体(实体型或实体集)之间的三类联系如图2-6所示。
多个实体型之间也存在一对一、一对多和多对多的联系,图2-7给出了三个实体型之间联系的图形表示。
重要提示
多个实体型之间存在的一对一、一对多或多对多的联系,是多个实体型之间的多元逻辑关系。例如,图2-7描述的是三个实体型之间的一对多的三元联系和多对多的三元联系,它并不意味着这三个实体型两两之间存在三个二元联系,它们具有不同的语义。
同一实体型内部各实体之间也存在一对一、一对多和多对多的联系,图2-8给出了各实体之间一对多和多对多联系的图形表示。例如,大学人员这个实体型,内部的实体分为教师和学生两大类,教师教学生,学生听教师讲课,按照真实世界的情形判断,大学人员这个实体型内部各实体之间存在多对多的联系,图2-9给出了两种图形表示。
两个实体型之间也可能存在多种联系,如图2-10所示。比如,教师和学生两个实体型之间的联系可以是:教师是学生的指导教师(一对一或一对多的联系),是学生的辅导员或是班主任(一对多的联系),或者是学生的任课老师(多对多的联系)。
3. E-R图的制作步骤
1)对需求进行分析,确定系统中包含的所有实体。
2)分析并选择每个实体所具有的属性。
3)确定实体的关键字,用下划线标明关键字的属性组合。
4)确定实体之间的联系。
5)确定联系的类型。
重要提示
E-R图通常有两种画法。一种是将属性、联系和实体集成在一个图中,适合系统规模不太大的情况。另一种是分离画法,即画出每个实体和它的属性图,再画出实体之间的联系图。分而画之的方法适合系统规模较大的情形,能够更加清晰地表达实体与实体之间的联系。
【例2-3】按照例2-1的描述,使用E-R图表示该大学教学管理的概念模型。
由例2-1和例2-2可知,存在三个实体:学院、学生、课程。这三个实体的关键字分别是学院编号、学号、课程号。学院与学生之间是一对多的联系,学生与课程之间是多对多的联系,学院与课程之间是一对多的联系。
本例给出两种画法,图2-11是第一种画法,将属性、联系和实体集成在一个图中。分离画法如图2-12所示,其中,a为实体和属性图,b为实体之间的联系图。
【例2-4】请根据图2-13给出的E-R图(这里只给出了实体和联系图),描述这三类实体之间的联系。
从图中可以看出,这是一个多对多的三元联系。一个教室可以有多名学生听多门课,一名学生可以在多个教室听多门课,一门课程可以在多个教室有多名学生来听。
【例2-5】例2-4给出的三个实体之间的多对多联系,是否与这三个实体两两之间的多对多联系等价?
三个实体之间的多对多联系,与这三个实体两两之间的多对多联系不是等价的。因为三个实体之间的多对多联系,称为多对多的三元联系,而三个实体两两之间的多对多联系称为多对多的二元联系,它们拥有不同的语义。
图2-14给出了E-R图中的多对多的二元联系集。一个教室可以容纳多名学生学习,一名学生可以在多个教室学习;一门课程可以在多个教室讲授,在一个教室可以进行多门课的授课活动;一名学生可以选修多门课程,一门课程可以有多名学生选修。
2.4 关系模型
关系模型是关系数据库系统的基础。关系模型的基本数据结构是二维表。关系模型是一种以数学理论为基础构造的数据模型,以二维表的形式来表达数据的逻辑结构。采用关系模型的数据库管理系统称为关系数据库管理系统(Relational DataBase Management System,RDBMS),常见的RDBMS有IBM的DB2和Informix,甲骨文公司的Oracle,Sybase公司Sybase,微软的SQL Server、Access等。
2.4.1 关系模型三要素
关系模型由关系数据结构、关系操作和关系完整性约束三部分组成。在关系模型中,实体和实体之间的联系均由关系来表示。如图2-15所示,关系就是一个二维表,表中每一行代表一个实体,称为元组或记录;表中的每一列代表实体的属性,每一列的第一行是实体的属性名,其余行对应实体的属性值。学生实体、课程实体均使用关系来表示,对应图2-15中的学生关系和课程关系;学生实体与课程实体之间的联系也使用关系来表示,对应图2-15中的成绩关系。
1. 关系数据结构
关系数据结构是指关系模型的逻辑结构。从用户的角度看,关系模型的逻辑结构就是一张由行和列组成的二维表。这个二维表不同于普通的表格,是一种规范化的数据表,称为关系,它由表名、行、列组成。图2-16给出了一个名为“课程表”的关系,每一行表示一个元组,代表一个实体。每一列表示一个属性,代表实体的一个特征。
关系模型的数据结构单一,与E-R模型相比,关系模型均使用“关系”来表示数据本身以及数据之间的联系,因此,关系是关系数据模型的核心。图2-17给出了一个关系模型的例子,使用二维表来表示学生、课程以及它们之间的联系—选课,选课表中的数据反映了学生和课程之间的多对多的联系。
2. 关系操作
关系操作是指对二维表的操作,其特点是集合操作方式,即关系操作的对象和结果都是集合。
常用的关系操作包括插入、删除、修改和查询四种。其中,查询操作包括并、交、差、广义笛卡儿积、选择、投影、连接、除等。查询是关系操作最主要的部分。
关系操作能力可用两种方式来表示:代数方式和逻辑方式,分别称为关系代数和关系演算。它们其实就是两个与关系模型有关的查询语言,在表达能力上完全等价,也是目前流行的商用数据库查询语言(如SQL和QBE)形成的基础。
关系代数是过程化的查询语言,它包括一个运算集合,通过对关系的运算来表达查询要求。关系代数的运算对象是关系,运算的结果也是关系。关系演算是非过程化的查询语言,使用谓词来表达查询要求,只描述所需要的信息,而不给出获得该信息的具体过程。因为关系代数与关系演算的表达能力完全等价,考虑到篇幅问题,本书只介绍关系代数,具体内容详见本书第三部分第6章的6.2节。
3. 关系完整性约束
关系完整性约束是指存入数据库中的数据应该满足的条件或规则。一般分为三类:实体完整性约束、参照完整性约束和用户定义的完整性约束。
实体完整性约束和参照完整性约束是关系模型必须满足的完整性约束条件,由系统自动支持,任何关系数据库系统都提供了实体完整性和参照完整性约束机制。用户定义的完整性约束是用户通过系统提供的完整性约束语言书写的约束条件,体现具体应用领域中的语义约束。约束条件由DBMS的完整性检查机制负责检查。关系完整性约束的具体内容将在2.4.3节介绍。
2.4.2 关系及相关定义
1. 关系
关系与E-R模型中的实体集对应。关系就是一张二维表,可以存储为一个文件。每个关系都有一个关系名。关系具有以下性质:
1)表中的每一列都是不可再分的基本数据项。
2)每一列的名字不同。
3)列是同质的,即每一列中的分量都是同一类型的数据,并都来自同一个域。
4)不同的列可以出自同一个域。
5)列的顺序是无关的,即列的次序可以改变。但排列顺序一旦固定,就不再变化。
6)行的顺序是无关的,即行的次序可以改变。
7)关系中不允许有完全相同的两行。
【例2-6】判断图2-18是否是一个关系。若不是一个关系,请进行修改,使其符合关系的定义和性质。
按照关系的定义和性质可以确定图2-18不是一个关系。因为报销金额这一列包含了三个基本数据项,不符合“表中的每一列都是不可再分的基本数据项”这个特点。图2-19给出了修改后的关系,其满足关系的定义和性质。
【例2-7】图2-20给出了一个关系,它与图2-19是否表示同一个关系?
通过观察发现,图2-20只是改变了列的顺序,根据关系的性质,列的次序可以改变,但关系不会因此而改变。因此,图2-20与图2-19是同一个关系。
重要提示
改变列的顺序,就是改变整个列的顺序。也就是说,属性的次序改变时,元组对应分量的排列次序也要随之改变。
2. 关系的属性和属性值
关系的属性与E-R模型中实体型的属性对应。关系中的列称为属性,确切地说,位于关系最上一行的每一列就是一个属性,每个属性都有一个名称即属性名,属性不能重名。关系的属性作为关系的列标题。一个属性对应文件中的一个字段。例如,在图2-19所示的关系中,有6个属性,分别是班级、组名、交通费、通信费、资料费和报销总金额。属性值是属性的具体取值。
3. 元组
元组与E-R模型中的实体对应。二维表中的行称为元组,确切地说,二维表中除属性名所在行之外的每个非空行即为一个元组。一个元组对应文件中的一条记录。
4. 分量
分量即每个元组的一个属性值。每个元组均有一个分量对应关系的每个属性。例如,在如图2-19所示的关系中,有5个元组,每个元组有6个分量,其中,第一个元组是(2010234101,甲组,120,200,560,880),它的第5个分量560就是属性“资料费”的值。
5. 域
域与E-R模型中属性的域相对应。属性的取值范围称为域。
6. 候选键
候选键也称候选关键字或候选码,与E-R模型中的关键字或码相对应。候选键是关系中的某个属性或属性组,可以唯一确定每一个元组,并且不包含多余的属性。比如,在如图2-19所示的关系中,属性组(班级,组名,交通费)虽然可以唯一确定每一个元组,但是属性“交通费”是多余属性,因为从属性组中除去它之后的(班级,组名)也可以唯一确定每一个元组。然而如果去掉属性组(班级,组名)中的任一个属性,剩余的属性不能唯一确定每一个元组,因此,属性组(班级,组名)就是如图2-19所示关系中的候选键。
7. 主键
被选用的候选键称为主键,主键也称主码,与E-R模型中的主关键字或主码相对应。一个关系可以有若干个候选键,但通常只能选择其中一个作为主键。主键是关系的一个重要属性,建立主键可以避免关系中存在完全相同的元组,也就是说,主键在一张表中的记录值是唯一的。例如,在如图2-19所示的关系中,只有一个候选键(班级,组名),因此,(班级,组名)也是主键。
8. 主属性
包含在主键中的属性。例如,主键(班级,组名)中“班级”是主属性,“组名”也是主属性。
9. 非主属性
在一个关系中,除了主属性之外的属性就是非主属性。例如,在如图2-19所示的关系中,“交通费”“通信费”“资料费”和“报销总金额”都是非主属性。
10. 关系模式
对关系的信息结构和语义限制的描述称为关系模式。关系模式与E-R模型中的实体型对应,是相对固定不变的。关系模式对应一个二维表的表头,通常使用关系名和所包含的属性名的集合来表示。在主属性上加上下划线表示该属性是主键中的一个属性。关系模式的一般形式为:
关系名(属性1,属性2,…,属性n)
例如,一个表示学生的关系模式为:
学生(学号,姓名,性别,专业代码,年龄)
图2-19对应的关系模式如下所示:
社会实践费用(班级,组名,交通费,通信费,资料费,报销总金额)
11. 关系实例
一个给定关系中元组或记录的集合。在不引起混淆的情况下,关系实例经常简称为关系。例如,图2-19和图2-20都是关系实例。
重要提示
1.关系模型与关系模式之间的关系,对应数据模型与数据模式之间的关系。一个关系模型包含一个或多个关系模式。
2.关系模式与关系实例是两个不同的概念。关系模型中,关系模式是对关系的描述,是关系的结构或框架,而关系实例是元组的集合,是关系模式的一个实例,表现形式为一张包含多个元组的二维表。通过一个关系模式可以定义多个关系实例,而每一个关系实例对应唯一的一个关系模式。
3.在数据库设计中,关系模式是设计重点之一,而关系实例不属于设计部分,通常只需要想象出与关系模式对应的典型关系实例。
【例2-8】已知专业关系模式专业(专业代码,专业名,系代码),试给出该关系模式的两个关系实例。
该关系模式的两个关系实例如图2-21和图2-22所示。
<p style="text-align:center">![image.png](https://ucc.alicdn.com/pic/developer-ecology/6560a0179d97444db4d65511b19ff593.png)
12. 外键
外键也称外部关键字或外码。假设有R和S两个关系,若F是R中的一个属性(组),但不是主键(或候选键),却是S的主键,则称F是R的外键。
【例2-9】对于学生关系与专业关系,请指出候选键、主键和外键。它们的关系模式如下:
**学生(学号,姓名,性别,专业代码,年龄)
专业(专业代码,专业名称,系代码)**
学生关系中,如果允许学生姓名相同,则候选键有两个:“学号”和“姓名”。如果不允许学生姓名相同,则只有一个候选键“学号”。按照专业惯例通常以“学号”作为唯一标识元组的主键。
专业关系中,候选键有两个,分别是“专业代码”和“专业名称”,因为它们都可以唯一标识关系中的每一个实体。通常选“专业代码”为主键。
学生关系与专业关系之间通过“专业代码”关联,“专业代码”是专业关系中的主键,是学生关系中的外键。
13. 主表和从表
假设有R和S两个关系,属性F是关系S的主键,是关系R的外键,则称S为主表,称R为从表。简单地说,从表就是外键所在的表或含有外键的表,外键在另一张表中做主键或候选键,那么这张表就称为主表。比如,在例2-9中,专业关系是主表,学生关系是从表。
2.4.3 关系的完整性约束
1. 实体的完整性约束
实体的完整性约束是指关系中的主键是一个有效值,不能为空值,并且不允许两个元组的主键值相同。简单地说,就是主键值必须唯一,并且不能为空值。
例如,在图2-21和图2-22中,专业代码是主键,那么该列既不能有空值也不能有重复的值,否则无法对应某个具体的专业,这样的表格不完整,对应的关系不符合实体完整性约束条件。再比如,在图2-19中,主键是(班级,组名),那么“班级”和“组名”这两列都不能有空值,也不允许存在任何两个元组在这两个属性上有完全相同的值。
【例2-10】图2-24给出了关系模式社会实践费用(班级,组名,交通费,通信费,资料费,报销总金额)的一个关系实例,说明该关系是否符合实体完整性约束条件。
图2-23给出的关系实例不符合实体完整性约束条件,因为存在如下两个问题:
1)第2个元组的“班级”属性值为空值。对于由多个属性组成的主键,“主键不能为空值”的意思是每一个主属性都不能为空值,即使第2个元组的“组名”属性值不是空值,也不符合“主键不能为空值”的实体完整性约束条件。比如,在给出的这个关系实例中,若要输入第2个元组的“班级”属性值,必须是除了“2010234102”之外的班级,否则,第2个元组的主键值会与第4个元组的主键值重复。
2)第1个元组的主键值与第3个元组的主键值相同,都是(2010234101,甲组),不符合“主键值必须唯一”的实体完整性约束条件。
2. 参照完整性约束
参照完整性约束也称外键约束。在关系模型中实体及实体间的联系是用关系来描述的,这样自然就存在着关系与关系之间的联系。关系数据库中通常包含了多个存在相互联系的关系,关系与关系之间的联系是通过公共属性来实现的,对于两个建立联系的关系,公共属性就是其中一个关系的主键,同时又是另一个关系的外键。
参照完整性约束给出了关系之间建立联系的主键与外键引用的约束条件,它要求“不引用不存在的实体”,或者说,关系的外键必须是另一个关系的主键的有效值或者空值。
比如,对于例2-9中的两个关系模式:
**学生(学号,姓名,性别,专业代码,年龄)
专业(专业代码,专业名称,系代码)**
这两个关系存在公共属性“专业代码”,它是专业关系中的主键,是学生关系中的外键。按照参照完整性约束,学生关系中的“专业代码”的取值要参照专业关系中的“专业代码”属性取值,也就是说,学生关系中的“专业代码”的值要么是专业关系中某个元组的“专业代码”的值,要么是空值。若学生的“专业代码”为空值,表示尚未给学生分配专业。实际上,参照完整性约束的目的是维护主表和从表之间外键所对应属性数据的一致性。
【例2-11】图2-24和图2-25分别给出了学生关系模式和专业关系模式的一个关系实例,说明是否符合参照完整性约束条件。
通过观察发现,图2-24学生关系中第2个元组的“专业代码”的值为“1003”,在专业关系中,这个代码不存在。因此,不符合参照完整性约束条件。
重要提示
在实际的关系数据库中,如果两个关系之间建立了表间关系,系统会自动支持参照完整性约束,即检查从表中外键的值是否为空值或者是否是来自主表中某个元组的主键值。
3. 用户定义的完整性
实体完整性和参照完整性约束机制,主要是针对关系的主键和外键取值必须有效而给出的约束规则。除了实体完整性和参照完整性约束之外,关系数据库管理系统允许用户定义其他的数据完整性约束条件。用户定义的完整性约束是用户针对某一具体应用的要求和实际需要,按照实际的数据库运行环境要求,对关系中的数据所定义的约束条件,它反映的是某一具体应用所涉及的数据必须要满足的语义要求和业务规则。这一约束机制一般由具体的数据库管理系统提供定义并进行检验。
用户定义的完整性约束包括属性上的完整性约束和整个元组上的完整性约束。属性上的完整性约束也称为域完整性约束。域完整性约束是最简单、最基本的约束,是指对关系中属性取值的正确性限制,包括关系中属性的数据类型、精度、取值范围、是否允许空值等。例如,在课程关系课程(课程号,课程名,学分)中,规定“课程号”属性的数据类型是字符型,长度为7位;“课程名”取值不能为空值且不超过20个字符;“学分”属性只能取1至5之间的整数值等。在例2-11中的学生(学号,姓名,性别,专业代码,年龄)关系中,规定“学号”为8位数字型字符;“姓名”至少是2个字符;性别的取值只能是“男”和“女”;年龄在12岁至50岁之间等。
整个元组上的完整性约束是关系模式的一部分,不与任何属性相关。例如,在课程(课程号,课程名,学分)中,规定以“2”开头的“课程号”对应的学分只能是5;不同的课程号对应相同的课程名等。
关系数据库管理系统一般都提供了NOT NULL约束、UNIQUE约束(唯一性)、值域约束等用户定义的完整性约束。例如,在使用SQL语言CREATE TABLE时,可以用CHECK短语定义元组上的约束条件,即元组级的限制,当插入元组或修改属性的值时,关系数据库管理系统将检查元组上的约束条件是否得到满足。关于SQL的具体内容详见本书第三部分的第6章6.3节。
2.4.4 关系模型的评价
与其他数据模型相比,关系数据模型具有下列优点:
1)关系模型建立在严格的数学理论基础之上,关系必须规范化。
2)关系模型概念单一,无论实体还是实体之间的联系都用关系表示,简单直观,用户容易理解。
3)关系模型能够直接表达实体之间的多对多联系。
4)关系模型中的数据操作是集合操作,即操作的对象和操作的结果都用关系表示,操作方便,用户很容易掌握。
5)关系模型的逻辑结构与相应的操作完全独立于数据的存储方式,具有高度的数据独立性,使得用户不必关心物理存储细节。
关系数据模型的主要缺点是面向记录,没有表示和构造复杂对象的能力。
2.5 小结
对数据的处理需要在对现实世界进行抽象和转化后在计算机世界完成。数据模型是数据抽象的工具。数据模型是将现实世界中的各种事物及事物间的联系使用数据及数据间联系来表示的一种方法。数据模型由数据结构、数据操作、数据完整性约束三部分组成。
根据数据抽象的三个层次,数据模型分为概念数据模型、逻辑数据模型和物理数据模型。概念数据模型是从用户的角度对现实世界的数据特征进行抽象和描述,强调对数据对象的基本表示和概括性描述,包括数据及数据间的联系,不考虑计算机的具体实现,与具体的DBMS无关。逻辑数据模型是从DBMS的角度对现实世界的数据特征进行抽象和描述,主要用于数据库系统的设计和实现。概念数据模型只有转化为逻辑数据模型,才能在DBMS中实现。每种逻辑数据模型在实现时,都有其对应的物理数据模型的支持。物理数据模型是从计算机存储介质的角度对现实世界的数据特征进行抽象和描述。
E-R模型是一种常见的概念数据模型。E-R模型的三个基本要素是实体、属性和联系。实体是现实世界中客观存在的一个具体或抽象的事物,一个实体与其他实体是能够相互区分的。属性就是描述实体特征的数据项。联系是两个或多个实体集之间或实体之间的相互关系。实体集是具有共同属性的一类实体的集合。联系集是两个或多个实体集之间或实体之间联系的总集合。E-R图是描述E-R模型常用的工具。
逻辑数据模型通常称为数据模型,传统上分为层次模型、网状模型和关系模型。其中,关系模型有着严格的数学理论基础,并且易于向其他逻辑数据模型转换,因而许多数据库管理系统产品都采用了关系模型。关系模型是关系数据库系统的基础,由关系数据结构、关系操作和关系完整性约束三部分构成。在关系模型中,实体和实体之间的联系均由关系来表示。关系是关系模型的核心,是一张具有某些性质的二维表。关系模式是关系的结构,描述关系数据结构和语义。
习题
1.数据模型的三要素是指什么?
2.数据模型和数据模式是同一个概念吗?
3.简述层次模型、网状模型和关系模型的优缺点。
4.概念模型和关系模型有什么区别和联系?
5.什么是E-R图?构成E-R图的基本要素是什么?
6.试给出3个局部应用的E-R图,要求分别表示出一对一、一对多、多对多的二元联系。
7.试给出2个局部应用的E-R图,要求分别表示出一对多的三元联系和多对多的三元联系。
8.现有一个局部应用,包括两个实体集“出版社”和“作者”。这两个实体集是多对多的联系,请描述应用场景,设计适当的属性,并画出E-R图。
9.名词解释:
关系模型、关系、关系模式、关系实例、元组、分量、域、主键、外键、主表、外表、关系代数
10.简述关系和关系模式的区别。
11.为什么在关系中不允许有完全相同的元组存在?
12.例2-8中图2-21给出了一个关系实例,请指出:
(1)关系的属性
(2)关系的元组
(3)每个关系中元组的分量
(4)关系模式
13.关系的完整性约束包括哪些内容?
14.主键约束的要求是什么?
15.外键约束定义的条件是什么?