数据模型
数据库技术是计算机领域中发展最快的技术之一。数据库技术的发展是沿着数据模型的主线推进的。模型,特别是具体模型对人们来说并不陌生。一张地图、一组建筑设计沙盘、一架精致的航模飞机都是具体的模型,一眼望去就会使人联想到真实生活中的事物。模型是对现实世界中某个对象特征的模拟和抽象。例如,航模飞机是对生活中飞机的一种模拟和抽象,它可以模拟飞机的起飞、飞行和降落,它抽象了飞机的基本特征——机头、机身、机翼、机尾。
数据模型(datamodel)也是一种模型,它是对现实世界数据特征的抽象。也就是说数据模型是用来描述数据、组织数据和对数据进行操作的。
由于计算机不可能直接处理现实世界中的具体事物,所以人们必须事先把具体事物转换成计算机能够处理的数据,也就是首先要数字化,把现实世界中具体的人、物、活动、概念用数据模型这个工具来抽象、表示和处理。通俗地讲,数据模型就是现实世界的模拟。
现有的数据库系统均是基于某种数据模型的。数据模型是数据库系统的核心和基础。因此,了解数据模型的基本概念是学习数据库的基础。
两类数据模型
数据模型应满足三方面要求:一是能比较真实地模拟现实世界,二是容易为人所理解,三是便于在计算机上实现。一种数据模型要很好地、全面地满足这三方面的要求在目前尚很困难。因此,在数据库系统中针对不同的使用对象和应用目的,采用不同的数据模型。
如同在建筑设计和施工的不同阶段需要不同的图纸一样,在开发实施数据库应用系统中也需要使用不同的数据模型:概念模型、逻辑模型和物理模型。
根据模型应用的不同目的,可以将这些模型划分为两大类,它们分别属于两个不同的层次。第一类是概念模型,第二类是逻辑模型和物理模型。
第一类概念模型(conceptual model),也称信息模型,它是按用户的观点来对数据和信息建模,主要用于数据库设计。
第二类中的逻辑模型主要包括层次模型(hierarchical model)、网状模型(network model)、关系模型(relational model)、面向对象数据模型(object oriented data model)和对象关系数据模型(object relational data model)、半结构化数据模型(semistructured data model)等。它是按计算机系统的观点对数据建模,主要用于数据库管理系统的实现。
第二类中的物理模型是对数据最底层的抽象,它描述数据在系统内部的表示方式和存取方法,或在磁盘或磁带上的存储方式和存取方法,是面向计算机系统的。物理模型的具体实现是数据库管理系统的任务,数据库设计人员要了解和选择物理模型,最终用户则不必考虑物理级的细节。
数据模型是数据库系统的核心和基础。各种机器上实现的数据库管理系统软件都是基于某种数据模型或者说是支持某种数据模型的。
为了把现实世界中的具体事物抽象、组织为某一数据库管理系统支持的数据模型,人们常常首先将现实世界抽象为信息世界,然后将信息世界转换为机器世界。也就是说,首先把现实世界中的客观对象抽象为某一种信息结构,这种信息结构并不依赖于具体的计算机系统,不是某一个数据库管理系统支持的数据模型,而是概念级的模型:然后再把概念模型转换为计算机上某一数据库管理系统支持的数据模型,这一过程如下图所示。

从现实世界到概念模型的转换是由数据库设计人员完成的;从概念模型到逻辑模型的转换可以由数据库设计人员完成,也可以用数据库设计工具协助设计人员完成;从逻辑模型到物理模型的转换主要是由数据库管理系统完成的。
下面首先介绍概念模型,数据模型的组成要素,然后介绍三个常用的数据模型。
概念模型
由上图可以看出,概念模型实际上是现实世界到机器世界的一个中间层次。概念模型用于信息世界的建模,是现实世界到信息世界的第一层抽象,是数据库设计人员进行数据库设计的有力工具,也是数据库设计人员和用户之间进行交流的语言,因此概念模型一方面应该具有较强的语义表达能力,能够方便、直接地表达应用中的各种语义知识,另一方面它还应该简单、清晰、易于用户理解。
①信息世界中的基本概念
信息世界主要涉及以下一些概念。
(1)实体(entity)
客观存在并可相互区别的事物称为实体。实体可以是具体的人、事、物,也可以是抽象的概念或联系,例如,一个职工、一个学生、一个部门、一门课、学生的一次选课、部门的一次订货、教师与院系的工作关系(即某位教师在某院系工作)等都是实体。
(2)属性(attribute)
实体所具有的某一特性称为属性。一个实体可以由若干个属性来刻画。例如,学生实体可以由学号、姓名、性别、出生年月、所在院系、入学时间等属性组成,属性组合(201315121,张山,男,199505,计算机系,2013)即表征了一个学生。
(3)码(key)
唯一标识实体的属性集称为码。例如学号是学生实体的码。
(4)实体型(entity type)
具有相同属性的实体必然具有共同的特征和性质。用实体名及其属性名集合来抽象和刻画同类实体,称为实体型。例如,学生(学号,姓名,性别,出生年月,所在院系,入学时间)就是一个实体型。
(5)实体集(entity set)
同一类型实体的集合称为实体集。例如,全体学生就是一个实体集。
(6)联系(relationship)
在现实世界中,事物内部以及事物之间是有联系的,这些联系在信息世界中反映为实体(型)内部的联系和实体(型)之间的联系。实体内部的联系通常是指组成实体的各属性之间的联系,实体之间的联系通常是指不同实体集之间的联系。
实体之间的联系有一对一、一对多和多对多等多种类型。
如果对于实体集A 中的每一个实体,实体集B中至多有一个(也可以没有)实体与之联系,反之亦然,则称实体集A与实体集B具有一对一联系。
如果对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之联系,反之,对于实体集B中的每一个实体,实体集A中至多只有一个实体与之联系,则称实体集A与实体集B有一对多联系。
如果对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之联系,反之,对于实体集B中的每一个实体,实体集A 中也有m个实体(m≥0)与之联系,则称实体集A与实体集B具有多对多联系。例如一门课程可以同时有若干名学生选修,而一个学生可以同时选修多门课程,则课程实体与学生实体具有多对多联系。
实体之间联系的详细内容将在第7章数据库设计中讲解。
②概念模型的一种表示方法:实体-联系方法
概念模型是对信息世界建模,所以概念模型应该能够方便、准确地表示出上述信息世界中的常用概念。概念模型的表示方法很多,其中最为常用的是P.P.S.Chen于1976年提出的实体-联系方法(Entity-Relationship approach)。该方法用E-R图(E-R diagram)来描述现实世界的概念模型,E-R方法也称为E-R模型。
有关如何认识和分析现实世界,从中抽取实体和实体之间的联系,建立概念模型, 画出E-R图的方法等内容也将在第7章讲解。
数据模型的组成要素
一般地讲,数据模型是严格定义的一组概念的集合。这些概念精确地描述了系统的静态特性、动态特性和完整性约束条件(integrity constraints)。因此数据模型通常由数据结构、数据操作和数据的完整性约束条件三部分组成。
①数据结构
数据结构描述数据库的组成对象以及对象之间的联系。也就是说,数据结构描述的内容有两类:一类是与对象的类型、内容、性质有关的,如网状模型中的数据项、记录,关系模型中的域、属性、关系等;一类是与数据之间联系有关的对象,如网状模型中的系型(settype)。
数据结构是刻画一个数据模型性质最重要的方面。因此在数据库系统中,人们通常按照其数据结构的类型来命名数据模型。例如层次结构、网状结构和关系结构的数据模型分别命名为层次模型、网状模型和关系模型。
总之,数据结构是所描述的对象类型的集合,是对系统静态特性的描述。
②数据操作
数据操作是指对数据库中各种对象(型)的实例(值)允许执行的操作的集合,包括操作及有关的操作规则。
数据库主要有查询和更新(包括插入、删除、修改)两大类操作。数据模型必须定义这些操作的确切含义、操作符号、操作规则(如优先级)以及实现操作的语言。
数据操作是对系统动态特性的描述。
③数据的完整性约束条件
数据的完整性约束条件是一组完整性规则。完整性规则是给定的数据模型中数据及其联系所具有的制约和依存规则,用以限定符合数据模型的数据库状态以及状态的变化,以保证数据的正确、有效和相容。
数据模型应该反映和规定其必须遵守的基本的和通用的完整性约束条件。例如,在关系模型中,任何关系必须满足实体完整性和参照完整性两个条件(在第2章关系数据库和第5章数据库完整性等有关章节中将详细讨论这两类完整性约束条件)。
此外,数据模型还应该提供定义完整性约束条件的机制,以反映具体应用所涉及的数据必须遵守的特定的语义约束条件。例如,在某大学的数据库中规定学生成绩如果有6门以上不及格将不能授予学士学位,教授的退休年龄是65周岁,男职工的退休年龄是60周岁,女职工的退休年龄是55周岁等。
常用的数据模型
数据库领域中主要的逻辑数据模型有:
层次模型(hierarchical model)
网状模型(network model)
关系模型(relational model)
面向对象数据模型(object oriented data model)
对象关系数据模型(object relational data model)
半结构化数据模型(semistructure data model)
其中层次模型和网状模型统称为格式化模型。
格式化模型的数据库系统在20世纪70年代至80年代初非常流行,在数据库系统产品中占据了主导地位。层次数据库系统和网状数据库系统在使用和实现上都要涉及数据库物理层的复杂结构,现在已逐渐被关系模型的数据库系统取代。但在美国及欧洲的一些国家里,由于早期开发的应用系统都是基于层次数据库或网状数据库系统的,因此目前仍有一些层次数据库系统或网状数据库系统在继续使用。
20世纪80年代以来,面向对象的方法和技术在计算机各个领域,包括程序设计语言、软件工程、信息系统设计、计算机硬件设计等方面都产生了深远的影响,也促进数据库中面向对象数据模型的研究和发展。许多关系数据库厂商为了支持面向对象模型,对关系模型做了扩展,从而产生了对象关系数据模型。
随着Internet的迅速发展,Web上各种半结构化、非结构化数据源已经成为重要的信息来源,产生了以XMI为代表的半结构化数据模型和非结构化数据模型。
本章简要介绍层次模型、网状模型和关系模型。其他新型的数据模型将在新技术篇的第13章中介绍。
数据结构、数据操作和数据完整性约束条件这三个方面的内容完整地描述了一个数据模型,其中数据结构是刻画模型性质的最基本的方面。为了使读者对数据模型有一个基本认识,下面着重介绍三种模型的数据结构。
注意:这里讲的数据模型都是逻辑上的,也就是说是用户眼中看到的数据范围。同时它们又都是能用某种语言描述,使计算机系统能够理解,被数据库管理系统支持的数据视图。这些数据模型将以一定的方式存储于数据库系统中,这是数据库管理系统的功能,是数据库管理系统中的物理存储模型。
在格式化模型中实体用记录表示,实体的属性对应记录的数据项(或字段)。实体之间的联系在格式化模型中转换成记录之间的两两联系。
在格式化模型中数据结构的单位是基本层次联系。所谓基本层次联系是指两个记录以及它们之间的一对多(包括一对一)的联系,如图下所示。

图中Ri位于联系Lij的始点,称为双亲结点(parent),Rj位于联系Lij的终点,称为子女结点(child)。
层次模型
层次模型是数据库系统中最早出现的数据模型,层次数据库系统采用层次模型作为数据的组织方式。层次数据库系统的典型代表是IBM公司的IMS(Information Management System),这是1968年IBM公司推出的第一个大型商用数据库管理系统,曾经得到广泛的使用。
层次模型用树形结构来表示各类实体以及实体间的联系。现实世界中许多实体之间的联系本来就呈现出一种很自然的层次关系,如行政机构、家族关系等。
①层次模型的数据结构
在数据库中定义满足下面两个条件的基本层次联系的集合为层次模型:
有且只有一个结点没有双亲结点,这个结点称为根结点;
根以外的其他结点有且只有一个双亲结点。
在层次模型中,每个结点表示一个记录类型,记录类型之间的联系用结点之间的连线(有向边)表示,这种联系是父子之间的一对多的联系。这就使得层次数据库系统只能处理一对多的实体联系。
每个记录类型可包含若干个字段,这里记录类型描述的是实体,字段描述实体的属性。各个记录类型及其字段都必须命名。各个记录类型、同一记录类型中各个字段不能同名。每个记录类型可以定义一个排序字段,也称为码字段,如果定义该排序字段的值是唯一的,则它能唯一地标识一个记录值。
一个层次模型在理论上可以包含任意有限个记录类型和字段,但任何实际的系统都会因为存储容量或实现复杂度而限制层次模型中包含的记录类型个数和字段的个数。
在层次模型中,同一双亲的子女结点称为兄弟结点(twin或sibling),没有子女结点的结点称为叶结点。下图给出了一个层次模型的例子。其中,R1为根结点;R2和R3为兄弟结点,是R1的子女结点;R4和R5为兄弟结点,是R2的子女结点;R3、R4和R5为叶结点。

从图上可以看出层次模型像一棵倒立的树,结点的双亲是唯一的。
层次模型的一个基本的特点是,任何一个给定的记录值只能按其层次路径查看,没有一个子女记录值能够脱离双亲记录值而独立存在。
下图是一个教员学生层次模型。该层次模型有4个记录类型。记录类型系是根结点,由系编号、系名、办公地点三个字段组成。它有两个子女结点教研室和学生。记录类型教研室是系的子女结点,同时又是教员的双亲结点,它由教研室编号、教研室名两个字段组成。记录类型学生由学号、姓名、成绩三个字段组成。记录类型教员由职工号、姓名、研究方向三个字段组成。学生与教员是叶结点,它们没有子女结点。由系到教研室、由教研室到教员、由系到学生均是一对多的联系。

下图是上图数据模型对应的一个值。该值是D02系(计算机科学系)记录值及其所有后代记录值组成的一棵树。D02系有三个教研室子女记录值R01、R02、R03和三个学生记录值S63871、S63874、S63876。教研室R01有三个教员记录值E2101、E1709、E3501;教研室R03有两个教员记录值E1101、E3102。

②层次模型的数据操纵与完整性约束
层次模型的数据操纵主要有查询、插入、删除和更新。进行插入、删除、更新操作时要满足层次模型的完整性约束条件。
进行插入操作时,如果没有相应的双亲结点值就不能插入它的子女结点值。例如在上图的层次数据库中,若新调入一名教员,但尚未分配到某个教研室,这时就不能将新教员插入到数据库中。
进行删除操作时,如果删除双亲结点值,则相应的子女结点值也将被同时删除。例如在上图的层次数据库中,若删除网络教研室,则该教研室所有教员的数据将全部丢失。
③层次模型的优缺点
层次模型的优点主要有:
(1)层次模型的数据结构比较简单清晰。
(2)层次数据库的查询效率高。因为层次模型中记录之间的联系用有向边表示,这种联系在DBMS中常常用指针来实现。因此这种联系也就是记录之间的存取路径。当要存取某个结点的记录值,DBMS就沿着这一条路径很快找到该记录值,所以层次数据库的性能优于关系数据库,不低于网状数据库。
(3)层次数据模型提供了良好的完整性支持。
层次模型的缺点主要有:
(1)现实世界中很多联系是非层次性的,如结点之间具有多对多联系,不适合用层次模型表示。
(2)如果一个结点具有多个双亲结点等,用层次模型表示这类联系就很笨拙,只能通过引入冗余数据(易产生不一致性)或创建非自然的数据结构(引入虚拟结点)来解决。对插入和删除操作的限制比较多,因此应用程序的编写比较复杂。
(3)查询子女结点必须通过双亲结点。
(4)由于结构严密,层次命令趋于程序化。
可见,用层次模型对具有一对多的层次联系的部门描述非常自然、直观,容易理解。这是层次数据库的突出优点。
网状模型
在现实世界中事物之间的联系更多的是非层次关系的,用层次模型表示非树形结构是很不直接的,网状模型则可以克服这一弊病。
网状数据库系统采用网状模型作为数据的组织方式。网状数据模型的典型代表是DBTG系统,亦称CODASYL系统。这是20世纪70年代数据系统语言研究会(Conference On Data System Language,CODASYL)下属的数据库任务组(Data Base Task Group,DBTG)提出的一个系统方案。DBTG系统虽然不是实际的数据库系统软件,但是它的基本概念、方法和技术具有普遍意义,对于网状数据库系统的研制和发展起了重大的影响。后来不少系统都采用DBTG模型或者简化的DBTG模型,如Cullinet Software公司的IDMS、Univac公司的DMS1100、Honeywell 公司的IDS/2、HP公司的IMAGE等。
①网状模型的数据结构
在数据库中,把满足以下两个条件的基本层次联系集合称为网状模型:
允许一个以上的结点无双亲。
一个结点可以有多于一个的双亲。
网状模型是一种比层次模型更具普遍性的结构。它去掉了层次模型的两个限制,允许多个结点没有双亲结点,允许结点有多个双亲结点;此外它还允许两个结点之间有多种联系(称之为复合联系)。因此,网状模型可以更直接地去描述现实世界。而层次模型实际上是网状模型的一个特例。
与层次模型一样,网状模型中每个结点表示一个记录类型(实体),每个记录类型可包含若干个字段(实体的属性),结点间的连线表示记录类型(实体)之间一对多的父子联系。
从定义可以看出,层次模型中子女结点与双亲结点的联系是唯一的,而在网状模型中这种联系可以不唯一。因此要为每个联系命名,并指出与该联系有关的双亲记录和子女记录。例如下图(a)中R3有两个双亲记录R1和R2,因此把R1与R3之间的联系命名为L1,R2与R3之间的联系命名为L2。图(a)、(b)、(c)都是网状模型的例子。

下面以学生选课为例,看一看网状数据库是怎样来组织数据的。
按照常规语义,一个学生可以选修若干门课程,某一课程可以被多个学生选修,因此学生与课程之间是多对多联系。因为DBTG模型中不能表示记录之间多对多的联系,为此引进一个学生选课的连接记录,它由三个数据项组成,即学号、课程号、成绩,表示某个学生选修某一门课程及其成绩。这样,学生选课数据库包括三个记录:学生、课程和选课。
每个学生可以选修多门课程,显然对学生记录中的一个值,选课记录中可以有多个值与之联系,而选课记录中的一个值,只能与学生记录中的一个值联系。学生与选课之间的联系是一对多的联系,联系名为S-SC。同样,课程与选课之间的联系也是一对多的联系,联系名为C-SC。下图所示为学生选课数据库的网状数据模型。

②网状模型的数据操纵与完整性约束
网状模型一般来说没有层次模型那样严格的完整性约束条件,但具体的网状数据库系统对数据操纵都加了一些限制,提供了一定的完整性约束。
例如,DBTG在模式数据定义语言中提供了定义DBTG数据库完整性的若干概念和语句,主要有:
(1)支持记录码的概念,码即唯一标识记录的数据项的集合。例如,学生记录(如上图)中学号是码,因此数据库中不允许学生记录中学号出现重复值。
(2)保证一个联系中双亲记录和子女记录之间是一对多的联系。
(3)可以支持双亲记录和子女记录之间的某些约束条件。例如,有些子女记录要求双亲记录存在才能插入,双亲记录删除时也连同删除。例如上图中选课记录就应该满足这种约束条件,学生选课记录值必须是数据库中存在的某一学生选修存在的某一门课的记录。DBTG提供了“属籍类别”的概念来描述这类约束条件。
③网状模型的优缺点
网状模型的优点主要有:
(1)能够更为直接地描述现实世界,如一个结点可以有多个双亲,结点之间可以有多种联系。
(2)具有良好的性能,存取效率较高。
网状模型的缺点主要有:
(1)结构比较复杂,而且随着应用环境的扩大,数据库的结构就变得越来越复杂,不利于最终用户掌握。
(2)网状模型的DDL、DML复杂,并且要嵌入某一种高级语言(如COBOL、C)中。用户不容易掌握,不容易使用。
(3)由于记录之间的联系是通过存取路径实现的,应用程序在访问数据时必须选择适当的存取路径,因此用户必须了解系统结构的细节,加重了编写应用程序的负担。
关系模型
关系模型是最重要的一种数据模型。关系数据库系统采用关系模型作为数据的组织方式。
1970年,美国IBM公司San Jose研究室的研究员E.F.Codd首次提出了数据库系统的关系模型,开创了数据库关系方法和关系数据理论的研究,为数据库技术奠定了理论基础。由于E.F.Codd的杰出工作,他于1981年获得ACM图灵奖。
20世纪80年代以来,计算机厂商新推出的数据库管理系统几乎都支持关系模型,非关系系统的产品也大都加上了关系接口。数据库领域当前的研究工作也都是以关系方法为基础。因此本书的重点也将放在关系数据库上,后面各章将详细介绍关系数据库。
①关系模型的数据结构
关系模型与以往的模型不同,它是建立在严格的数学概念的基础上的。严格的定义将在第二章“关系数据库”中给出。这里只简单勾画一下关系模型。从用户观点看,关系模型由一组关系组成。每个关系的数据结构是一张规范化的二维表。下面以学生登记表(如下图所示)为例,介绍关系模型中的一些术语。

关系(relation):一个关系对应通常说的一张表,例如上图中的这张学生登记表。
元组(tuple):表中的一行即为一个元组。
属性(attribute):表中的一列即为一个属性,给每一个属性起一个名称即属性名。如上图所示的表有6列,对应6个属性(学号,姓名,年龄,性别,系名和年级)。
码(key):也称为码键。表中的某个属性组,它可以唯一确定一个元组,如上图中的学号可以唯一确定一个学生,也就成为本关系的码。
域(domain):域是一组具有相同数据类型的值的集合。属性的取值范围来自某个域。如人的年龄一般在1~120岁之间,大学生年龄属性的域是(15~45岁),性别的域是(男,女),系名的域是一个学校所有系名的集合。
分量:元组中的一个属性值。
关系模式:对关系的描述,一般表示为关系名(属性1,属性2,···,属性n)
例如,上面的关系可描述为学生(学号,姓名,年龄,性别,系名,年级)
关系模型要求关系必须是规范化的,即要求关系必须满足一定的规范条件,这些规范条件中最基本的一条就是,关系的每一个分量必须是一个不可分的数据项,也就是说,不允许表中还有表。例如,下图中工资和扣除是可分的数据项,工资又分为基本工资、岗位津贴和业绩津贴,扣除又分为三险和个人所得税。因此,下图的表就不符合关系模型要求。

可以把关系和现实生活中的表格所使用的术语做一个粗略的对比,如下图所示。

②关系模型的数据操纵与完整性约束
关系模型的数据操纵主要包括查询、插入、删除和更新数据。这些操作必须满足关系的完整性约束条件。关系的完整性约束条件包括三大类:实体完整性、参照完整性和用户定义的完整性。其具体含义将在后续内容中介绍。
关系模型中的数据操作是集合操作,操作对象和操作结果都是关系,即若干元组的集合,而不像格式化模型中那样是单记录的操作方式。另一方面,关系模型把存取路径向用户隐蔽起来,用户只要指出“干什么”或“找什么”,不必详细说明“怎么干”或“怎么找”,从而大大地提高了数据的独立性,提高了用户生产率。
③关系模型的优缺点
关系模型具有下列优点:
(1)关系模型与格式化模型不同,它是建立在严格的数学概念的基础上的。
(2)关系模型的概念单一。无论实体还是实体之间的联系都用关系来表示。对数据的检索和更新结果也是关系(即表)。所以其数据结构简单、清晰,用户易懂易用。
(3)关系模型的存取路径对用户透明,从而具有更高的数据独立性、更好的安全保密性,也简化了程序员的工作和数据库开发建立的工作。
所以关系模型诞生以后发展迅速,深受用户的喜爱。
当然,关系模型也有缺点,例如,由于存取路径对用户是隐蔽的,查询效率往往不如格式化数据模型。为了提高性能,数据库管理系统必须对用户的查询请求进行优化,因此增加了开发数据库管理系统的难度。不过用户不必考虑这些系统内部的优化技术细节。







