
1.3 数据模型
数据库是某个企业、组织或部门所涉及的数据的综合,它不仅要反映数据本身的内容,而且要反映数据之间的联系。由于计算机不可能直接处理现实世界中的具体事物,所以人们必须事先把具体事物转换成计算机能够处理的数据。在数据库技术中使用数据模型来抽象表示现实世界中的数据和信息。
现实世界中的数据要进入到数据库中,需要经过人们的认识、理解、整理、规范和加工。可以把这一过程划分成3个主要阶段,即现实世界阶段、信息世界阶段和机器世界阶段。现实世界中的数据经过人们的认识和抽象,形成信息世界;在信息世界中用概念模型来描述数据及其联系,概念模型按用户的观点对数据和信息进行建模,不依赖于具体的机器,独立于具体的数据库管理系统,是对现实世界的第一层抽象;根据所使用的具体机器和数据库管理系统,需要对概念模型进行进一步转换,形成在具体机器环境下可以实现的数据模型。这3个阶段的相互关系可以用图1-5来表示。

图1-5 对现实世界数据的抽象过程
数据在每一个阶段都有其相应的概念和术语。
1.3.1 现实世界
在现实世界阶段,把现实世界中客观存在并可以相互区分的事物称为实体。实体可以是实际存在的东西,也可以是抽象的。例如,学生、课程、零件、仓库、项目、案件等都是实体。
每一个实体都具有一定的特征。例如,对于“学生”实体,它具有学号、姓名、性别、出生日期等特征;对于“零件”实体,它具有名称、规格型号、生产日期、单价等特征。
具有相同特征的一类实体的集合构成了实体集。例如,所有的学生构成了“学生”实体集;所有的职员构成了“职员”实体集;所有的部门构成了“部门”实体集等。
在一个实体集中,用于区分实体的特征称为标识特征。例如,对于学生实体,学号可以作为其标识特征,因为通过不同的学号可以区分不同的学生实体,而性别则不能作为其标识特征,因为通过性别“男”并不能识别出具体是哪个学生。
1.3.2 信息世界
人们对现实世界的对象进行抽象,并对其进行命名、分类,在信息世界用概念模型来对其进行描述。信息世界涉及的主要概念如下。
(1)实体:对应于现实世界的实体。例如,一个学生、一门课程、一个仓库、一个零件等。
(2)属性:对应于实体的特征。一个实体可以由若干个属性来刻画。例如,学生实体可以有学号、姓名、性别、班级、年龄等属性;课程实体可以有课程编号、课程名称、学分等属性。
(3)码:对应于实体的标识特征,是唯一标识实体的属性。例如,学生实体可以用学号来唯一标识,因此学号可以作为学生实体的码。
(4)域:属性的取值范围称为该属性的域。例如,姓名的域为字符串集合;年龄的域为不小于零的整数;性别的域为(男,女)。
(5)实体型:具有相同属性的实体必然具有相同的特征和性质。用实体名及其属性名集合来描述实体,称为实体型。例如,学生实体型描述如下。
学生(学号,姓名,性别,年龄)
课程实体型可以描述如下。
课程(课程号,课程名,学分)
(6)实体集:同型实体的集合构成了实体集。例如,全体学生构成了学生实体集。
(7)联系:现实世界中的事物之间通常都是有联系的,这些联系在信息世界中反映为实体内部的联系和实体之间的联系。实体内部的联系通常指组成实体的各属性之间的联系;实体之间的联系通常指不同实体集之间的联系。这些联系总的来说可以划分为一对一联系、一对多(或多对一)联系以及多对多联系。
• 一对一联系:如果实体集A与实体集B之间存在联系,并且对于实体集A中的任意一个实体,在实体集B中至多只有一个实体与之对应;而对于实体集B中的任意一个实体,在实体集A中也至多只有一个实体与之对应,则称实体集A和实体集B之间存在着一对一的联系(表示为1:1)。
例如,“公司”是一种实体,“总经理”也是一种实体。如果按照语义,一个公司只能有一个总经理,而一个总经理只能管理某一个公司,则“公司”和“总经理”实体之间的联系就是一对一的联系。这种关系可以用图1-6来表示,这里把公司和总经理之间的关系称为“管理”关系。

图1-6 一对一联系
• 一对多联系:如果实体集A与实体集B之间存在联系,并且对于实体集A中的任意一个实体,在实体集B中可以有多个实体与之对应;而对于实体集B中的任意一个实体,在实体集A中至多只有一个实体与之对应,则称实体集A到实体集B的联系是一对多的联系(表示为1:n)。
例如,“部门”是一种实体,“职工”也是一种实体。如果按照语义,一个部门可以有多个职工,而一个职工只能归属于一个部门,则“部门”实体和“职工”实体的联系就是一对多的联系,如图1-7所示。这里把部门和职工之间的关系称为“属于”关系。

图1-7 一对多联系
• 多对多联系:如果实体集A与实体集B之间存在联系,并且对于实体集A中的任意一个实体,在实体集B中可以有多个实体与之对应;而对于实体集B中的任意一个实体,在实体集A中也可以有多个实体与之对应,则称实体集A与实体集B的联系是多对多的联系(表示为m:n)。
例如,“学生”是一种实体,“课程”也是一种实体,“学生”实体和“课程”实体的联系就是多对多的联系。因为一个学生可以学习多门课程,而一门课程又可以有多个学生来学习,它们之间的关系如图1-8所示。这里把课程和学生之间的关系称为“选修”关系。

图1-8 多对多联系
两个以上的实体之间也存在一对一、一对多和多对多的联系。例如,“邮局”是一种实体,“邮票”是一种实体,“顾客”是一种实体,这3个实体之间存在着一种关系,这里称之为“购买”关系。它表示,一个顾客可以在多个邮局中买多种邮票;一个邮局可以把多种邮票出售给多个顾客;一种邮票可以在多个邮局中被多个顾客所购买。这样的三元关系如图1-9所示。

图1-9 三个实体之间的多对多联系
(8)概念模型:概念模型是对信息世界的建模,因此,概念模型应该能够方便、准确地表示出上述信息世界中的常用概念。概念模型有多种表示方法,其中,最常用的是“实体-联系方法”(Entity Relationship Approach),简称E-R方法。E-R方法用E-R图来描述现实世界的概念模型,E-R图提供了表示实体、属性和联系的方法,具体如下。
• 实体型:用矩形表示,在矩形内写明实体名。图1-10所示为学生实体和课程实体。

图1-10 实体的表示
• 属性:用椭圆形表示,并用无向边将其与实体连接起来。例如,学生实体及其属性用E-R图表示,如图1-11所示。

图1-11 学生实体及其属性
• 联系:用菱形表示,在菱形框内写明联系的名称,并用无向边将其与有关的实体连接起来,同时在无向边旁标上联系的类型。例如,图1-6、图1-7和图1-8分别表示了一对一、一对多和多对多的联系。需要注意的是,联系本身也是一种实体型,也可以有属性。如果一个联系具有属性,则这些属性也要用无向边与该联系连接起来。例如,图1-12表示了学生实体和课程实体之间的联系,即“选修”联系,每个学生选修某一门课程会产生一个成绩,因此,“选修”联系有一个属性“成绩”,学生和课程实体之间是多对多的联系。

图1-12 学生实体及课程实体之间的联系
用E-R图表示的概念模型独立于具体的DBMS所支持的数据模型,是各种数据模型的共同基础,因此比数据模型更一般、更抽象、更接近现实世界。
1.3.3 机器世界
当信息进入计算机后,则进入机器世界范畴。概念模型是独立于机器的,需要转换成具体的DBMS所能识别的数据模型才能将数据和数据之间的联系保存到计算机上。在计算机中可以用不同的方法来表示数据与数据之间的联系,把表示数据与数据之间的联系的方法称为数据模型。数据库领域常见的数据模型有以下4种。
(1)层次模型(Hierarchical Model)。
(2)网状模型(Network Model)。
(3)关系模型(Relational Model)。
(4)面向对象的模型(Object Oriented Model)。
其中,关系模型是目前使用最广泛的数据模型,其他数据模型在20世纪70年代至80年代初比较流行,现在已经逐步被关系模型的数据库系统所取代。因此,本书将只讨论关系模型。需要注意的是,以下介绍的关系模型是用户眼中看到的数据模型,实际上关系模型是可以在某种DBMS的支持下、用某种语言进行描述的,通过DBMS提供的功能实现对其进行存储和实施各种操作。把支持关系模型的数据库管理系统称为关系数据库管理系统,简称RDBMS。