1.4 传统数据模型概述
不同的数据模型具有不同的数据结构形式。在数据库系统中,由于采用的数据模型不同,相应的数据库管理系统(DBMS)也不同。目前常用的数据模型有3种:层次模型、网状模型和关系模型。其中层次模型和网状模型统称为非关系模型。非关系模型的数据库系统在20世纪70年代非常流行,到了20世纪80年代,逐渐被关系模型的数据库系统取代,但在美国等一些国家里,由于历史的原因,目前层次和网状数据库系统仍为某些用户所使用。
数据结构、数据操作和完整性约束条件完整地描述了一个数据模型,其中数据结构是刻画模型性质的最基本的方面。下面着重从数据结构角度介绍层次模型、网状模型和关系模型。
1.4.1 层次模型
层次模型是数据库系统中最早出现的数据模型,层次数据库系统采用层次模型作为数据的组织方式。
用树状结构来表示实体之间联系的模型称为层次模型。
构成层次模型的树是由节点和连线组成的,节点表示实体集(文件或记录型),连线表示相连两个实体之间的联系,这种联系只能是一对多的。通常把表示“一”的实体放在上方,称为父节点;而把表示“多”的实体放在下方,称为子节点。根据树结构的特点,层次模型需要满足下列两个条件。
(1) 有且仅有一个节点没有父节点,这个节点即为树根节点。
(2) 其他数据记录有且仅有一个父节点。
在现实世界中许多实体之间的联系本来就呈现一种很自然的层次关系,如行政机构、家族关系等,如图1-12所示。
图1-12 学院行政机构的层次模型
层次模型的一个基本的特点是,任何一个给定的记录值只有按其路径查看时,才能展现出它的全部意义,没有一个子女记录值能够脱离双亲记录值而独立存在。
层次模型最明显的特点是层次清楚、构造简单及易于实现,它可以很方便地表示出一对一和一对多这两种实体之间的联系。但由于层次模型需要满足上面两个条件,这样就使得多对多联系不能直接用层次模型表示。如果要用层次模型来表示实体之间的多对多联系,则必须首先将实体之间的多对多联系分解为几个一对多联系。分解方法有两种:冗余节点法和虚拟节点法。
层次模型的主要优点有如下几个。
(1) 层次数据模型本身比较简单。
(2) 对于实体间联系是固定的且预先定义好的应用系统,采用层次模型来实现,其性能优于关系模型,不低于网状模型。
(3) 层次数据模型提供了良好的完整性支持。
层次模型的主要缺点也有如下几个。
(1) 现实世界中的很多联系是非层次性的,如多对多联系、一个节点具有多个双亲等,在层次模型中表示这类联系比较难,只能通过引入冗余数据(易产生不一致性)或创建非自然组织(引入虚拟节点)来解决。
(2) 对插入和删除操作的限制比较多。
(3) 查询子节点必须通过双亲节点。
(4) 由于结构严密,层次命令趋于程序化。
在典型的层次数据库系统中,IMS数据库管理系统是第一个大型商用DBMS,于1968年推出,由IBM公司研制。
1.4.2 网状模型
网状模型和层次模型在本质上是一样的,从逻辑上看它们都使用连线表示实体之间的联系,用节点表示实体集;从物理上看,层次模型和网络模型都用指针来实现两个文件之间的联系,其差别仅在于网状模型中的连线或指针更加复杂,更加纵横交错,从而使数据结构更复杂。
在网状模型中同样使用父节点和子节点的术语,并且同样把父节点安排在子节点的上方。
在数据库中,把满足以下两个条件的基本层次联系集合称为网状模型。
(1) 允许一个以上的节点无双亲。
(2) 一个节点可以有多于一个的双亲。
网状模型是一种比层次模型更具普遍性的结构,它去掉了层次模型的两个限制,允许多个节点没有双亲节点,允许节点有多个双亲节点,此外它还允许两个节点之间有多种联系(称为复合联系),因此网状模型可以更直接地去描述现实世界。而层次模型实际上是网状模型的一个特例。
与层次模型一样,网状模型中的每个节点表示一个记录类型(实体),每个记录类型可包含若干字段(实体的属性),节点间的连线表示记录类型(实体)之间一对多的父子联系。
网状模型是以记录型为节点的网状结构,它的特点如下。
(1) 可以有一个以上的节点无“父亲”。
(2) 至少有一个节点多于一个“父亲”。
由这两个特点可知,网状模型可以描述数据之间的复杂关系。例如,学院的教学情况可以用图1-13所示的网状模型来描述。
图1-13 学院教学情况的网状模型
网状模型和层次模型都属于格式化模型。格式化模型是指在建立数据模型时,根据应用的需要,事先将数据之间的逻辑关系固定下来,即先对数据逻辑结构进行设计使数据结构化。
由于网状模型所描述的数据之间的关系要比层次模型复杂得多,在层次模型中子节点与双亲节点的联系是唯一的,而在网状模型中这种联系可以不唯一。因此,为了描述网状模型的记录之间的联系,引进了“系(Set)”的概念。所谓“系”可以理解为命名了的联系,它由一个父记录型和一个或多个子记录型构成。每一种联系都用“系”来表示,并将其标以不同的名称,以便相互区别,如图1-13中的“教师-课程系”、“课程-学习系”、“学生-学习系”和“班级-学生系”等。从图1-13中可以看到教师的属性有:姓名、性别、年龄、职称;班级的属性有:班号、专业、人数;课程的属性有:课程号、课程名称、学时数;学生的属性有:学号、姓名、性别、年龄;课程与学生的联系学习的属性为:学号、课程号、分数。
用网状模型设计出来的数据库称为网状数据库。网状数据库是目前应用较为广泛的一种数据库,它不仅具有层次模型数据库的一些特点,而且也能方便地描述较为复杂的数据关系。
网状数据模型的优点主要有如下两个。
(1) 能够更为直接地描述现实世界,如一个节点可以有多个双亲。
(2) 具有良好的性能,存取效率较高。
网状数据模型的缺点也主要有如下两个。
(1) 结构比较复杂,而且随着应用环境的扩大,数据库的结构变得越来越复杂,不利于用户最终掌握。
(2) 其DDL、DML语言复杂,用户不容易使用。
典型的网状数据库系统,DBTG系统,也称为CODASYL系统,是由DBTG提出的一个系统方案,为数据库系统的基本概念、方法和技术的提出奠定了基础,于20世纪70年代推出。实际系统包括Cullinet Software Inc.公司的IDMS、Univac公司的DMS1100、Honeywell公司的IDS/2、HP公司的IMAGE等。
1.4.3 关系模型
关系模型是目前最重要的一种数据模型。关系数据库系统采用关系模型作为数据的组织方式。
在关系模型中,把数据看成一个二维表,每一个二维表称为一个关系。例如,表1-2所示的二维表就是一个关系。表中的每一列称为属性,相当于记录中的一个数据项,对属性的命名称为属性名;表中的一行称为一个元组,相当于记录值。
表1-2 学生基本信息表
对于表示关系的二维表,其最基本的要求是,表中元组的每一个分量必须是不可分的数据项,即不允许表中再有表。关系是关系模型中最基本的概念。
与格式化模型相比,关系模型有以下几个方面的优点。
(1) 数据结构比较简单。
(2) 具有很高的数据独立性。
(3) 可以直接处理多对多的联系。
(4) 具备坚实的理论基础。
在层次模型中,一个n元关系有n个属性,属性的取值范围称为值域。
一个关系属性名的表称为关系模式,也就是二维表的框架,相当于记录型。若某一关系的关系名为R,其属性名为A1, A2, …, An,则该关系的关系模式记为:
R(A1, A2, …, An)
例如,表1-3所示的二维表为一个三元关系,其关系名为ER,关系模式(即二维表的表框架)为ER (S#, SN, SD)。其中,S#、SN、SD分别是这个关系中的3个属性的名称,{S1, S2, S3, S4, S5}是属性S#(学号)的值域,{Liu Yang, Zhao Jun, Yang Lei, Zhou Tao, Li Ming}是属性SN(学生姓名)的值域,{Physics, Computer, Chemistry, Mathematics, Chemistry}是属性SD(所属系)的值域。
表1-3 学生信息表
术语“父”与“子”不属于关系数据库操作语言,但也常使用该术语来说明关系之间的关系,即使用术语“父”关系和“子”关系。在关系数据操作语言中用连接字段值的等与不等来说明和实现联系。
现在的数据库管理系统,全部都是关系数据库管理系统,如Sybase、Oracle、MS SQL Server及FoxPro和Access等。