
2.2.3 逻辑数据模型
20世纪60年代末70年代初相继出现了层次模型、网状模型和关系模型,它们的特点是能有效地存储数据和处理数据,但其表达能力有限,不能描述和模拟现实世界中的复杂应用,基本上是面向机器的。所以,对于决策支持系统和计算机辅助制造这样的复杂应用,其描述能力和建模能力显然不足。随着面向对象技术和人工智能的发展,在传统的数据模型基础上产生了一批面向用户的语义模型,如前面所述的E-R模型和函数数据模型等。尽管如此,三大传统数据模型特别是关系模型仍是当今使用的主流模型。
在现实世界中,许多事物之间的联系可以用一种层次结构表示出来。如一个学校由若干个学院组成,一个学院由若干个系组成,一个系由若干个专业组成等。层次模型就是根据现实世界中存在的这些层次结构特点而提出的一种数据模型。层次模型是三大传统数据模型中出现最早的一个。基于层次模型的数据库管理系统IMS是IBM公司于1968年推出的世界上第一个数据库管理系统。
层次模型是用树型结构来表示实体集之间联系的模型。层次模型可以看作是一棵以记录型为节点的有向树,它把整个数据库的结构表示成一个有序树的集合,而这些有序树的每一个节点是一个由若干数据项组成的逻辑记录型。
图2.9给出的是一个层次模型的例子。它表示的是一个学校教务管理系统的信息。学校设有若干个学院,每个学院设有若干个系,每个系设有若干个专业和若干个教师,每个专业和教师只属于一个系。另外,每个专业开设若干门课程并有若干个学生,而一个学生只能属于某一个专业,一门课程也只能由一个专业开设。
由图2.9可见,该层次模型有六个记录类型,即学院、系、专业、教师、课程和学生。学院称为根记录类型,它是系记录类型的父记录类型,而系则是学院记录类型的子记录类型。在层次模型中只有一个节点而无父节点,该节点称为根节点(“学院”记录类型)。其他节点是依据根节点而存在的,它们有且仅有一个父节点。同一个父节点下的子节点称为兄弟节点,无子节点的节点则称为叶节点。在层次模型中,父节点与子节点的联系都是一对多的联系,且总是从父节点指向子节点。所以,记录之间的联系可以不用命名,只要指出父节点就可以找到其子节点。在层次模型中,从根节点开始,按照父—子联系,依次连接的记录序称为层次路径。在层次模型中,数据是按层次路径存取的。

图2.9 教务管理系统的层次模型
层次模型只能表示一对多联系,而现实世界中事物之间的联系往往是很复杂的,既有一对多联系,也有多对多联系。为了反映多对多联系,层次模型引入一种辅助数据结构——虚拟记录类型和逻辑指针,将其转换成一对多联系。例如,在学校教务管理系统中,如果要反映学生选修课程的情况,因为学生和课程之间为多对多联系,所以要引进一个虚拟记录类型“选修”和逻辑指针,将其转换成一对多联系(如图2.10所示)。

图2.10 多对多层次表示法
层次模型是一种简单的模型,无法描述复杂的联系,表达能力弱,所以其适用范围受限。
美国负责开发COBOL(Common Business Oriented Language)语言的委员会CODASYL(Conference on Data System Languages)的一个小组DBTG(Data Base Task Group)在其发表的一个报告中提出了网状模型。网状模型中的每一个节点代表一个记录类型,联系用链接指针来实现。网状模型突破了层次模型的两点限制,即允许节点有多于一个的父节点;可以有一个以上的节点没有父节点。在网状模型中,子女到双亲的联系不是唯一的,即在网状模型中可以很容易地实现多对多联系,可以描述更复杂的现实世界。在网状模型中,给每一对父节点与子节点之间的联系都要指定名字,这种联系称为系。系中的父节点称为首记录型或主记录型,子节点称为属记录型。
如图2.11所示,图中有四个系,分别为“专业-学生”系、“专业-课程”系、“学生-成绩”系和“课程-成绩”系。

图2.11 学生选课网状模型
网状模型的主要缺点是数据结构本身及其相应的数据操作语言都极为复杂。一般来说,结构越复杂,则其功能越强,所要处理的操作也越多,因此,相应的数据操作语言也就越复杂。而且由于网状模型结构复杂,故给数据库设计带来了困难。
基于层次模型和网状模型的数据库系统开发出来以后,在继续开发新型数据库系统的工作中,研究人员发现层次模型和网状模型缺乏坚实的理论基础,难以开展深入的理论研究。于是人们开始寻求具有严格的理论基础的数据模型。在这种背景下,埃德加·弗兰克·科德于1970年提出了关系模型。关系模型是目前数据库系统普遍采用的数据模型,也是应用最广的数据模型。自1980年以来,计算机厂商推出的数据库管理系统的产品几乎都是支持关系模型的。关系模型流行的主要原因在于:关系模型对数据及数据联系的表示非常简单,无论是数据还是数据间的联系都用关系来表示;关系模型支持高度非过程化的说明型语言表示数据的操作;同时,关系模型具有严格的理论基础——关系代数。
关系模型通过表格数据,而不是通过指针连接来表示和实现两个实体集间的联系。或者可以通俗地说,关系就是二维表格,表格中的每一行称作一个元组,它相当于一个记录值;每一列是一个属性值,列可以命名,称为属性名,此处的属性与前面所讲的实体属性相同,属性值相当于记录中的数据项或字段值。关系是元组的集合,如果表格有n列,则称该关系为n元关系。关系具有以下属性:①表格中的每一列都是不可再分的基本属性;②各列的名字不同,列的顺序不重要;③行的次序无关紧要;④关系中不允许有完全相同的两行存在。
表2.1就是一个关系模型的例子。
表2.1 员工信息表

通常,我们将关系名及其属性名集合称为关系模式,具体的关系是实例。表2.1中员工信息表的关系模式:员工信息表(员工编码,姓名,部门,性别,职务)。其中“员工信息表”为关系名,这个关系描述了某单位员工的数据结构。
在支持关系模型的数据库中,数据被看作是一个个的关系,描述数据库全部关系的一组关系模式称为关系型数据库的数据库模式。任何时刻数据库的所有具体的关系组成关系型数据库的一个实例。
关系模型具有以下特点。
(1)描述的一致性。
无论是信息世界中的实体还是联系都是用一个关系来描述,从而保证了数据操作语言相应的一致性,对于每一种基本操作功能,都只需要一种操作运算。
(2)利用公共属性连接。
关系模型中的各个关系之间都是通过公共属性发生联系的。
(3)结构简单直观。
采用表结构,用户容易理解,有利于和用户进行交互,并且在计算机中实现也极为方便。
(4)有严格的理论基础。
二维表的数学基础是关系数据理论,对二维表进行的数据操作相当于在关系理论中对关系进行运算。这样,在关系模型中整个模型定义与操作均建立在严格的数学理论基础上。
(5)语言表达简练。
在进行数据库查询时,用严密的关系运算表达式来描述查询,从而使查询语句的表达非常简单直观。
关系模型的缺点是:在执行查询操作时需要执行一系列的查表、拆表、并表操作,故执行时间较长。但是,采用优化技术的当代关系数据库管理系统的查询操作的效率完全不输于建立在其他数据模型上的数据库系统。
正因为以上特点,关系模型和关系数据库管理系统已成为当代数据库技术的主流。
前面讨论的层次模型、网状模型和关系模型由于结构上的不同,它们都有各自的特点。为了进行比较,首先要给出比较的标准,由此才能看出一个模型的好坏。对于数据模型,一般人们主要关心以下两个方面。
(1)使用容易程度。
数据库系统的用户是各种各样的。因此,为用户提供一个良好接口的数据库系统将是十分受欢迎并具有生命力的。所以,在选择数据模型时需要选择一个用户使用方便的(即能使程序设计和表达询问很容易的)模型。
(2)实现效率。
这方面要考虑数据库系统的实现难易和效率如何。这就要求一个数据模型允许DBMS方便地把概念模式和概念到物理的映像转换成一种既能节省空间又能快速响应询问的实现。
就使用方便来说,关系模型是最佳的。关系模型对用户的要求很低,有功能丰富的、容许表达对关系数据库进行各种询问的高级语言,这些语言对于那些不熟悉程序设计的人来说是十分合适的。相对而言,层次模型和网状模型这样的格式化模型要求用户既要了解记录类型存取路径,又要了解它们之间的相互关系,这些都增加了用户的负担。
从实现效率来看,层次模型和网状模型要优于关系模型。格式化模型的存取路径事先都是规定好的,链技术可以大显身手,这样存取的效率就比较高,而且实现起来相对也容易些。
从存储空间上来说,格式化模型较关系模型更能合理利用空间。在关系模型中是靠冗余来实现连接的。
以前,商品化的数据库系统几乎全都是基于层次模型和网状模型。因为这样的数据库系统着眼于大型数据库的维护,而这些数据模型又很容易支持它们对高效率实现的要求。但是,现在关系模型已经受到人们的重视。一方面,因为用于设计大型数据库的概念也适用于中小型数据库,而小型数据库比大型数据库要多得多。随着小型数据库的应用,关系模型固有的容易使用的特点越来越突出。另一方面,关系模型那些表面上的低效性有许多是能够消除的。例如,可以通过优化技术来提高效率。此外,用层次模型和网状模型设计的数据库系统是通过指针链来查找数据,而用关系模型设计的数据库系统则是通过查表来查找数据。改进指针链的查找收效甚微,而加快查表速度则大有潜力可挖。所有这些都促使人们采用关系模型。
人们将层次模型、网状模型和关系模型统称为传统数据模型。由于历史条件和技术条件的限制,传统数据模型也有弱点。
(1)以记录为基础,不能很好地面向用户和应用。
传统数据模型的基本结构是记录,而人们对现实世界的认识往往通过实体,实体不一定与记录相对应。一个记录中可能包含多个实体,同样一个实体也可能分在多个记录中加以描述。有些实体也可能仅仅作为某个记录中的属性出现,无记录与其相对应。记录的划分往往从实现考虑,而不一定反映人们对现实世界的认识。另外,记录中的属性以及每个属性的域都是事先定义好了的,无法灵活地描述纷繁的现实世界。
(2)不能以自然的方式表示实体间的联系。
实体的描述是数据模型的一个方面,实体间联系也是数据模型的一个重要方面。层次模型和网状模型虽然提供了描述联系的手段,但这些描述联系的方式不是实体间联系的自然表现,而是联系在数据库中的物理实现。把本来应该对用户隐蔽的物理实现的细节当作数据模型的组成部分呈现在用户面前,这不但不便于用户的理解和使用,而且也有损于数据的物理独立性。尽管关系模型避免了这个缺点,实体间的联系或通过一个表示联系的关系来表示,或通过公共属性来体现,但是关系模型表示联系的方式不是显式的,故用户很难从数据模式看出实体间的全面联系,现实世界中的实体联系被湮没在关系和属性之中。所以,三种传统数据模型都不能自然地表示实体间的联系。
(3)数据类型太少,难以满足应用需要。
传统数据模型原来都是面向事物处理的。它们一般只提供最常用的一些简单的数据类型,如整数、实数、字符串等。随着计算机应用的发展,不但要求数据库系统提供更丰富的数据类型和允许用户定义新的数据类型,还希望属性值不直接给出,而由规则或过程导出。随着时态和空间数据库的发展,要求数据附有时间属性和空间属性,这些都是传统的数据模型不能直接支持的。
由于传统数据模型存在上述的不足,从20世纪70年代后期开始陆续出现了各种非传统数据模型,这些数据模型出现在关系模型之后,因此又称为后关系数据模型。如前面介绍的E-R模型以及面向对象模型。