UML软件工程组织

 

 

工程数据库设计与应用
 
来源:ccut.edu.cn
 


◆第二章 工程数据库技术基础

◇ 课前索引

内容简介

本章主要讲解有关数据库技术、传统的数据库模型、数据库系统的功能组成及其数据库系统结构等。

学习目标

通过本章的学习,学生必须掌握数据库、数据库系统、数据模型、数据库管理系统的功能、数据库管理系统的体系结构等。

学生要求

本章的内容与我们系本科生开设的数据库原理或数据库系统有所重复。对于有这方面理论和实践经验的学生可跳过前面有关数据库和数据库模型章节,而直接掌握工程数据库的特点及其应用的要求。对于非计算机系的学生课后可能还需要阅读书后所附的数据库理论方面的参考书。

学习指南

学习本章需要学生有数据库方面的知识,特别是数据库模型和数据库系统方面的基本知识。如学生不具备这些知识,可能要阅读相关的参考书。本章在简要的回顾了数据库技术及其基本概念后,重点讨论数据库模型、工程数据库的特点及与传统数据库的不同,最后介绍一些高级的数据库系统知识。

学习安排

6学时

本章知识点

◇ 第一节 数据、信息及数据管理

所谓数据,是指可被记录、识别的物理符号序列。例如语言、文字、数字、图像、声音等。数据是用来记录和反映事物状况的客观描述。

信息向人们提供关于现实世界的新的事实知识。通过各种方式可以被传送,可以用能被人感受的声音、图形、文字所表征,并且与某特定事实、主题或事件相联系的消息、情报或知识,均可被称为信息。即是说,信息是经过加工并对人类社会实践和生产实践活动产生决策影响的数据。

数据与信息在概念上是有区别的,不是所有数据都能成为信息,只有抽取加工之后,具有新的事实知识的数据才能成为信息。数据经过加工处理之后成为信息,仍然以数据形式表现,此时数据是信息的载体,成为人们能动地认识和改造世界的媒体。

数据和信息之间的关系如同原料和成品之间的关系,数据是原料,信息是成品。同一组数据,对某个人是信息,对另一个人就是数据,如同某个部门的成品是另一个部门的原料一样。所以数据和信息的概念是相对的,在工程数据库系统中,数据和信息的含义是相同的,只有结合具体的应用或工程过程才能区分数据和信息,也就是我们所说的数据处理。

数据与信息在概念上是有区别的,不是所有数据都能成为信息,只有抽取加工之后,具有新的事实知识的数据才能成为信息。数据经过加工处理之后成为信息,仍然以数据形式表现,此时数据是信息的载体,成为人们能动地认识和改造世界的媒体。

数据和信息之间的关系如同原料和成品之间的关系,数据是原料,信息是成品。同一组数据,对某个人是信息,对另一个人就是数据,如同某个部门的成品是另一个部门的原料一样。所以数据和信息的概念是相对的,在工程数据库系统中,数据和信息的含义是相同的,只有结合具体的应用或工程过程才能区分数据和信息,也就是我们所说的数据处理。

图2-1 现实世界中客观对象的抽象过程

也就是说,首先把现实世界中的客观对象抽象为某一种信息结构,这种结构并不依赖于具体的计算机系统,不是某一个数据库管理系统DBMS支持的数据模型,而是概念级的模型;然后把概念模型转换为计算机上某一DBMS支持的数据模型。

  • 现实世界:是存在于客观事物及其相互联系之中的,是信息之源,是数据库管理的出发点,也是使用数据库的归宿。
  • 信息世界:也称概念世界,是现实世界在人头脑中的反映。客观事物在观念世界中称为实体,反映实体之间的联系称为实体模型。
  • 数据世界:也称机器世界,是观念世界中信息的数字化,现实世界中的事物及其联系在计算机中用数据模型描述。

表2-1 信息三个世界使用的术语对照表

本小节是上一章的简单回顾,课堂讲解时不解释,主要要求学生掌握表2-1中不同术语及其对应关系,了解数据模型这个名词。在讨论数据模型之前,我们先介绍数据管理技术的发展。

◇ 第二节 数据管理技术的发展

2.2.1、数据管理技术的发展

数据库技术的发展与数据管理技术的发展是紧密相关的。在讨论数据库技术发展之前,我们先介绍数据管理技术的发展。

数据管理技术可根据数据的独立性、数据的冗余度、数据间的相互关系及数据的安全性、完整性等特点划分成三个不同的阶段:
 - 人工管理阶段
 - 文件系统管理阶段和
 - 数据库系统阶段:

人工管理阶段:

20世纪50年代中期以前,计算机主要用于科学计算。当时的硬件状况是,外存只有纸带、卡片、磁带,没有磁盘等直接存取的存储设备;软件状况是,没有操作系统,没有管理数据的软件;数据处理的方式是批处理。

人工管理具有如下特点:数据不保存、应用程序管理数据、数据不共享、数据不具有独立性。应用程序和数据之间的关系如下图所示:

图2-2 人工管理阶段应用程序与数据之间的对应关系

文件系统阶段:

20世纪50年代后期到60年代中期,这时硬件方面已有了磁盘、磁鼓等直接存储设备;软件方面已经有了专门的数据库管理软件,一般称为文件系统;处理方式不仅有了批处理,而且能够联机实时处理。

用文件系统管理数据具有如下特点:数据可以长期保存、由文件系统管理数据(按文件名访问,按记录进行存取)、数据共享性差,冗余度大、数据独立性差。

图2-3 文件系统阶段应用程序与数据之间的对

数据库系统阶段:

20世纪60年代后期,计算机用于管理的规模越来越大,应用越来越广泛,数据量急剧增长,同时多种应用、多种语言互相地共享数据集合的要求越来越强烈。这时硬件已有大容量磁盘,硬件价格下降,软件价格上升,为编制和维护系统软件及其应用所需的成本相对增加;在处理方式上,联机实时处理要求更多,并开始提出和考虑分布处理。

图2-4 数据库系统阶段应用程序与数据库之间的对应关系

数据管理技术三阶段之间的关系及其特点可简单的用下表(表2-2)表述:

数据管理技术在计算机技术出现以前就开始研究,上述的三个阶段主要指采用计算机后数据管理的三个阶段(手段)。 

表2-2 数据管理的三个阶段及其特点

2.2.2数据库技术的发展

在数据库技术中,数据模型是数据库系统的核心和基础。按照数据模型的进展,数据库技术可以相应地分为三个发展阶段。

1、 第一代数据库系统指层次和网状数据库系统

其代表是:
 1) 1969年IBM公司研制的层次模型的数据库管理系统IMS(Information Management System)。
 2) 美国数据库系统语言协商会CODASYL(Conference On Data System Language)下属的数据库任务组DBTG(Data Base Task Group)于60年代末70年代初提出了DBTG报告,确定并建立了数据库系统的许多概念、方法和技术。DBTG所提议的方法是基于网状结构的。它是数据库网状模型的典型代表。

这两种数据库系统具有下列共同特点

1. 支持三级模式的体系结构:

"数据抽象的三个级别",最早是在1971年通过的DBTG报告中提出的,后来,1975年收入在美国ANSI/X3/SPARC报告中。虽然现在DBMS的产品多种多样,在不同的操作系统支持下工作,但是绝大多数系统在总的体系结构上仍具有外模式、模式、内模式的三级结构的特征。

2. 用存取路径来表示数据之间的联系:

这是数据库系统和文件系统的主要区别之一。数据库不仅存储数据而且存储数据之间的联系。数据之间的联系在层次和网状数据库系统中是用存取路径来表示和实现的。

3. 独立的数据定义语言:

层次数据库系统和网状数据库系统有独立的数据定义语言,用以描述数据库的外模式、模式、内模式以及相互映象。诸模式一经定义,就很难修改。修改模式必须首先把数据全部卸出,然后重新定义诸模式,重新生成诸模式,最后编写实用程序把卸出的数据按新模式的定义装入新数据库中。因此在许多实际运行的层次、网状数据库系统中,模式是不轻易重构的。这就要求数据库设计人员在建立数据库应用系统时,不仅充分考虑用户的当前需求,还要充分了解需求可能的变化和发展。对数据库设计的要求比较高。

4. 导航的数据操纵语言:

层次和网状数据库的数据查询和数据操纵语言是一次一个记录的导航式的过程化语言。这类语言通常嵌入某一种高级语言如COBOL、FORTRAN、PL/1中。

2、第二代数据库系统:

关系数据库系统 支持关系数据模型的关系数据库系统是第二代数据库系统。因此,在计算机领域中有人把七十年代称为关系数据库时代。八十年代几乎所有新开发的系统均是关系的。关系数据库是以关系模型为基础的。

关系模型具有以下主要特点:
  1). 关系模型的概念单一,实体以及实体之间的联系都用关系来表示;
  2). 以关系代数为基础,形式化基础好;
  3). 数据独立性强,数据的物理存储和存取路径对用户隐蔽;
  4). 关系数据库语言是非过程化的,将用户从编程数据库记录的导航式检索中解脱出来,大大减小了用户编程的难度;

关系模型概括的讲由三部分组成:
  1). 数据结构:数据结构包括域,域上定义的关系等。关系模型中,实体、实体与实体之间的联系都通过关系这种单一的结构类型来表示。
  2. 关系操作:关系操作的能力可用关系代数(或等价的关系演算)中并、交、差、广义笛卡尔积、选择、投影、连接、除等操作来表示。关系操作的特点是集合操作。无论是操作的对象还是操作的结果都是集合。这种操作方式被称为一次一集合(set-at-a-time)的方式,与非关系型的一次一记录(record-at-a-time)的方式相对照。
  3. 数据完整性:数据完整性包括实体完整性、参照完整性以及与应用有关的完整性。实体完整性和参照完整性是关系模型必须满足的完整性约束条件,应由关系数据库系统自动支持;与应用有关的完整性由用户定义,它是针对某一具体数据库的约束条件,由应用环境决定,关系数据库系统应提供定义和检验这类完整性的机制。

3、第三代数据库系统

新一代数据库技术的研究和发展导致了众多不同于第一、二代数据库的系统诞生,构成了当今数据库系统的大家族。这些新的数据库系统无论它是基于扩展关系数据模型的、还是面向对象数据模型的;是分布式、客户/服务器或混合式体系结构的;是在SMP还是在MPP并行机上运行的并行数据库系统;是用于某一领域(如工程、统计、GIS)的工程数据库、统计数据库、空间数据库……,我们都可以广泛地称之为新一代数据库系统。

经过多年的研究和讨论,对第三代数据库系统的基本特征已有了共识:
  1) 第三代数据库系统应支持数据管理、对象管理和知识管理:除提供传统的数据管理服务外,第三代数据库系统将支持更加丰富的对象结构和规则,应该集数据管理、对象管理和知识管理为一体。由此可以导出第三代数据库系统必须支持对象数据模型。
  2) 第三代数据库系统必须保持或继承第二代数据库系统的技术:即必须保持第二代数据库系统的非过程化数据存取方式和数据独立性。
  3) 第三代数据库系统必需对其它系统开放:数据库系统的开放性表现在:支持数据库语言SQL标准;在网络上支持标准网络协议TCP/IP;系统具有良好的可移植性、可连接性、可扩展性和可互操作性等。

传统数据库管理系统的局限性:

 1)、 面向机器的语法数据模型
  传统数据库中采用的数据模型强调数据的高度结构化,是面向机器的语法数据模型。关系模型只有一个非常简单的结构性概念--关系,在传统的面向事务管理的应用中,数据对象具有同形结构,这样它们很容易映射到关系来表示;而工程对象拥有许多异形结构,一个复杂对象可能由许多具有不同结构的子对象组成。对这些复杂对象比较自然的(即对于用户来说是友好的)表示,就需要有比关系模型更复杂的抽象机制。
  在关系数据库系统中必须将在逻辑上是一个整体的复杂对象分解为好几个基本关系。在这种结构下内部数据库结构与外部对象不在是一一对应的。对许多操作来说,人们更希望把所操作的部分抽象为一个逻辑单位,而关系模型不支持这一点。于是人们必须从关系模式的片段中构造复杂对象,其结果常常是带有许多冗余数据的不自然的复杂查询。进一步讲,重构复杂对象还带来另一个问题,那就是,由连接构造的视图一般是不可更新的。
 2)、 数据类型简单、固定
  传统的DBMS只能理解、存储和处理简单的数据类型。如整数、浮点数、字符串、日期、货币等。传统的RDBMS只支持某一固定的类型集,不能依据某一应用所需的特定数据类型来扩展其类型集。例如,不能定义包含三个实数分量的数据类型vector来表示三维向量。
 3)、 结构与行为分离
  从应用程序员角度来看,在某一应用领域内标识的对象应包含两个方面的内容:
    结构表示
    行为规格说明
  前者可映射到数据库模式(带着前面所提到的缺陷),而后者在传统数据库系统中则完全失去了。
  传统数据库主要关心数据的独立性以及存取数据的效率,是语法数据库,语义表达差,难以抽象化地去模拟行为。例如,用户在CAD设计中用某些数据结构来表示的对象,对他们的操作(如成形、显示和组合等)就无法存放到数据库中。这样,对象的行为特征在传统数据库系统中最多只能由应用程序来表示。因此在传统数据模型中,结构与行为被完全分割开了。
 4)、阻抗失配
  在关系数据库系统中,数据操纵语言如SQL与通用程序设计语言之间的失配称为阻抗失配。这种不匹配表现在两个方面:一是编程模式不同,描述性的SQL语言与指令式的编程语言如C语言不同;二是类型系统不匹配,编程语言不能直接表示诸如关系这样的数据库结构,在其界面就会丢失信息。进一步地,由于是两个类型系统,自动的类型检查也成了问题。
 5)、 被动相应
  传统数据库管理系统只能响应和重做用户要求它们做的事情,从这种意义上说,它们是被动的。而在实际应用中,往往要求一个系统能够管理它本身的状态,在发现异常情况时及时通知用户;能够主动响应某些操作或外部事件,自动采取规定的行动;应该能够在一些预定的(或动态计算的)时间间隔中自动执行某些操作。这就是说,要求系统更加主动、更加智能化,而传统的数据库系统显然不能适应这一要求。
 6)、 存储和管理的对象有限
  传统的DBMS只存储和管理数据,缺乏知识管理和对象管理的能力,不具有演绎和推理的功能,因而无法满足MIS、DSS、OA和AI等领域中进行高层管理和决策的要求,从而限制了数据库技术的高级应用。
 7)、 事务处理能力差
  传统数据库只能支持非嵌套事务。对长事务的响应较慢,而且在长事务发生故障时恢复也比较困难。

4、新一代数据库技术的特点

一方面立足于数据库已有的成果和技术,加以发展进化,有人称之为"进化论"的观点和方法。另一方面的努力是立足于新的应用需求和计算机未来的发展,研究全新的数据库系统,有人称之为"革新论"的观点和方法。

可以说新一代数据库技术的研究,新一代数据库系统的发展呈现了百花齐放的局面。其特点是:

 1) 、面向对象的方法和技术对数据库发展的影响最为深远
  八十年代出现的面向对象的方法和技术对计算机各个领域,包括程序设计语言、软件工程、信息系统设计,以及计算机硬件设计等都产生了深远的影响,也给面临新挑战的数据库技术带来了机会和希望。数据库研究人员借鉴和吸收了面向对象的方法和技术,提出了面向对象数据模型(简称对象模型)。 该模型克服了传统数据模型的局限性,为新一代数据库系统的探索带来了希望,促进了数据库技术在一个新的技术基础上继续发展
 2)、数据库技术与多学科技术的有机结合
  数据库技术与多学科技术的有机结合是当前数据库技术发展的重要特征。计算机领域中其它新兴技术的发展对数据库技术产生了重大影响。 传统的数据库技术和其它计算机技术的互相结合,建立和实现了一系列新型数据库系统,如分布式数据库系统、并行数据库系统、演绎数据库系统、知识库系统、多媒体数据库系统等等。它们共同构成了数据库系统大家族。
 3)、面向应用领域的数据库技术的研究
  研究和开发面向特定应用领域的数据库系统的基本方法是以传统数据库技术为基础,针对某一领域的数据对象的特点,建立特定的数据模型,它们有的是关系模型的扩展和 修改,有的是具有某些面向对象特征的数据模型。

在简单回顾了数据库技术的产生和发展历史后,我们下面讨论数据库管理系统的一些基本概念。这对于没有数据库理论知识背景的同学可能还要阅读其它教材。

◇ 第三节 数据库管理的基本概念

2.3.1 数据库管理系统的基本概念

数据库(DataBase):长期储存在计算机内的,有组织的,可共享的数据集合。数据库中的数据是按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。

为了有效的管理和使用这些数据,我们需要一个数据库管理系统(DataBase Management System)。所以DBMS是位于用户和操作系统之间的一层数据管理软件。主要包括以下功能:

 1)、数据定义功能:是指对构成数据库结构(模式)的定义,包括:概念模式、存储模式、外模式(视图)、每一个外模式与模式之间的映射、模式与存储模式之间的映射;保证数据库中存储数据的语义正确和有效的完整性规则的定义;对存储数据的使用权限的定义等。这些定义通常是由数据库系统管理员按系统提供的数据定义语言的源形式书写,然后由DBMS自动地将其转换成内部目标形式,存入数据库目录/辞典中,供以后对数据操作或控制时查阅使用。

 2)、 数据操作处理功能:包含两层意思:其一是对数据的操作,包括数据的初始装入、数据的查询、插入、修改、删除以及数据模式的修改操作。数据模式的修改如果是在尚未装入数据时的修改,就纯粹是数据定义的过程,如果在已装入了数据后对模式的修改,则包含了数据库模式和当前值必须匹配的处理。其二是上述操作是由DBMS根据用户按数据操作语言书写的语句,翻译成一组操作系统可执行的数据读入和处理操作,系统执行这一系列操作后才能得到用户需要的结果,这整个过程实现时有明显的效率问题(查询优化)。

 3)、 数据管理和控制功能:数据的管理是在系统提供了一定的控制机制下实现的,具体有:数据安全性控制(防止数据受到非合法用户的操纵);数据完整性控制(保证数据的正确性和有效性);数据并发控制(保证在多个用户并发地操纵数据时,不出现非一致的状态)。数据管理还包括实现这些控制所需要的一些信息,如:事务运行日志、并发状态表(锁表、时间印)的管理;出现故障后对数据恢复到犹如没有出现故障时一样的管理;甚至还包括由DBMS支持的数据文件管理(大文件、小文件,操作系统管理,DBMS管理)。

 4)、 数据接口功能:DBMS是用户和操作系统之间的界面,可以把它看作为具体的数据模型描述的现实世界的信息结构在计算机系统上的具体实现。尽管DBMS提供了一定的数据库语言,用户书写的源程序如何进入计算机系统,也是不应该忽视的。这部分功能称为DBMS的用户接口。这部分可以独立与DBMS。但为了面向用户、方便用户、任何计算机提供的软件绝对不能没有友好的用户接口。此外,数据库的操作最后是对物理存储器的存取,必定有与操作系统的接口,包括操作系统支持下的单机处理、多机处理、分时处理、分布处理、远程作业输入等接口处理。

 5)、 数据库设计辅助工具:对于数据设计来讲,决定模式是非常重要的。它必须面对非常庞大而又复杂的数据,综合适应各用户需要的概念结构。考手工实现数据库模式的建立很困 难,必须借用计算机工具(CASE工具)来完成。提供这部分功能的软件称为数据库设计辅助工具系统,这部分功能对于关系数据库管理系统来讲,可以是它的子系统或直接融合在各个功能中。

2.3.2 数据库技术的基本概念

数据库技术:是研究数据库的结构、存储、设计、管理和使用的一门软件学科。

数据库技术是在操作系统的文件系统基础上发展起来的,而且DBMS本身要在操作系统支持下才能工作。数据库和数据结构的联系也很密切,数据库技术不仅要用到数据结构中链表、树、图等知识,而且还丰富了数据结构的内容。

程序是使用数据库系统最基本的方式,因为系统中大量的应用程序都是用高级语言加上数据库的操纵语言编写的。

集合论、数理逻辑是关系数据库的理论基础,很多概念、术语、思想都直接用到关系数据库中。关系数据库是目前应用最广的数据库管理系统。

因此,数据库技术是一门综合性较强的学科,它涉及到以下一些基本概念:
  数据字典:数据字典本身就构成一专用数据库,可以用自身专用的软件系统来管理。数据字典的信息可以由用户及系统管理员来输入、也可通过系统自动生成或通过输入与自动生成的结合。数据字典的基本目的在于辅助数据管理和系统控制:一方面向用户提供组织、修改和应用数据库的指南,另一方面作为某些软件的输入信息(如为报表程序提供表头信息等等)。数据字典也称数据库目录,包括:
    数据内涵的信息:包括逻辑模式和存储模式的描述、数据类型的定义,以及数据完整性法则和视图定义等。
    系统管理的信息:包括逻辑模式、数据压缩与反压缩、数据加密与解密、系统完整性规定等。
    档案性的信息:包括数据的注释、意义、来源、归属、入库日期、修改日期、标志等。
  数据的结构化:在数据库系统中,数据不再针对某一应用,而是面向全组织,具有整体的结构化。不仅数据是结构化的,而且存取数据的方式也很灵活,可以存取数据库中的某一个数据项、一个记录或一组记录。数据共享:数据库系统从整体角度看待和描述数据,数据不再面向某个应用而是面向整个系统,因此数据可以被多个用户,多个应用共享使用。数据的共享可以大大减少数据冗余、节省存储空间。数据共享还能够避免数据之间的不相容性和不一致性。
  数据的不一致性:指同一数据不同拷贝的值不一样。数据物理独立性:指用户的应用程序与存储在磁盘上的数据库中数据是相互独立的。也就是说,数据在磁盘上的数据库是怎样存储由DBMS管理的,用户程序不需要了解,应用程序处理的只是数据的逻辑结构,这样当数据的物理存储改变了,应用程序不用改变。
  数据逻辑独立性:指用户的应用程序与数据库的逻辑结构是相互独立的,也就是说,数据的逻辑结构改变了,应用程序可以不变。
  数据的安全性:指保护数据以防止不合法的使用造成的数据的泄密和破坏。使每个用户只能按规定,对某些数据以某些方式进行使用和处理。
  数据的完整性:指数据的正确性、有效性和相容性。完整性检查将数据控制在有效的范围内,或保证数据之间满足一定的关系。
  数据的并发控制:当多个用户的并发进程同时的存取、修改数据库时,可能会发生相互干扰而得到错误的结果或使得数据库的完整性遭到破坏,因此必须对多个用户的并发操作加以控制和协调。数据库的恢复:计算机系统的硬件故障、软件故障、操作员失误以及故意的破坏也会影响数据库中数据的正确性,甚至造成数据库部分或全部数据的堆失。DBMS必须具有将数据库从错误状态恢复到某一已知的正确状态的功能。

◇ 第四节 数据库中的数据模型

2.4.1、数据模型的概念

在数据库技术中,数据模型是数据库系统的核心和基础。数据库的各种用户都用数据模型这个工具来抽象、表示和处理现实世界中的数据和信息。通过数据模型这种数学形式,将形形色色的、千变万化的事物抽象成计算机可以表示的形式。因此数据库的数据模型可以看作是一种形式化描述数据、数据之间的联系以及有关的语义约束规则的抽象方法。它规定数据如何结构化和一体化,以及规定允许对这种结构化数据进行何种操作。

数据模型的定义包括三个方面:数据结构、数据操作集合及完整性规则集合。

  数据结构:指对实体类型和实体间联系的表达和实现,因此是对系统静态特性的描述。数据结构是刻画一个数据模型最重要的方面。
  数据操作:是指对数据库中各种对象(实体类型)的实例(值)允许执行的操作的集合,包括操纵及有关的操作规则。数据库主要有检索和更新(包括插入、删除、修改)两大类操作。数据模型必须定义这些操作的确切含义、操作符号、操作规则(如优先级)以及实现操作的语言。
  数据的约束条件:是一组完整性规则的集合。完整性规则是给定的数据模型中数据及其联系所具有的制约和依存规则,用以限定符合数据模型的数据库状态以及状态的变化,以保证数据库中数据的正确、有效和安全。数据模型既要反映和规定数据模型必须遵循的基本的通用的完整性约束条件(如关系模型中的实体完整性和参照完整性两个条件),又要提供定义完整性约束条件的机制,以反映具体应用所涉及的数据必须遵守的特定的语义约束条件。

数据模型是对现实世界数据特征的抽象,因此数据模型应能满足三个方面的要求:
 1) 一是能比较真实地模拟现实世界,即数据模型要有丰富的语义表达能力,有足够的能力表示现实世界的各种信息;
 2) 二是容易为人所理解:即数据模型的概念应该简单、清晰、易于用户的理解,它是现实世界的第一层次抽象,是用户和数据库设计者之间进行交流的工具;
 3) 三是便于在计算机上实现:数据模型要与计算机技术相结合。

在数据库技术中使用的数据模型的种类很多,目前对数据模型被广泛使用的分类可分为两种:
 1) 一种是独立于计算机系统的数据模型,它完全不涉及信息在计算机系统中的表示,只是用来描述某个特定组织所关心的信息结构,这类模型称为"概念模型"。概念模型用于建立信息世界的数据模型,强调其语义表达能力,概念应该简单、清晰、易于用户的理解,它是现实世界的第一层次抽象,是用户和数据库设计者之间进行交流的工具。这一类模型在工程应用中最著名有"IDEF模型"、"实体关系模型"、面向对象模型、语义模型等。
 2) 另一种数据模型是直接面向数据库的逻辑结构的,它是现实世界的第二层次的抽象。这类模型涉及到计算机系统和数据库管理系统,又称为"基本数据模型"或"结构数据模型"。例如层次、网状、关系、面向对象等模型。这种模型有严格的形式化定义,以便于在计算机系统中实现。它通常有一组严格定义了无二义性的语法和语义的数据库语言,人们可以用这种语言来定义、操纵数据库中的数据。

目前在数据库中最常用的结构数据模型有以下几种:
 1)层次模型(Hierarchical Model):层次模型是数据库系统中最早出现的数据模型,层次数据库系统的典型代表是IBM公司的IMS数据库管理系。
 2)网状模型(Network Model):网状模型用有向图(网络)结构表示实体类型及实体间联系的数据模型。网状数据模型的典型代表是DBTG系统,也称为CODASYL系统。
 3)关系模型(Relational Model):关系模型的主要特征是用表格结构表达实体,用外键表示实体间的联系。与前两种模型相比,关系模型比较简单,容易为初学者接受。
 4)对象模型(Object Model):在数据处理领域,关系数据库的使用已相当普遍、相当出色。但是现实世界存在着许多具有更复杂数据结构的实际应用领域,如多媒体数据、CAD数据等应用问题,已有的层次、网状、关系三种数据模型对这些应用领域都显得力不从心,需要更高级的数据库技术来表达,以便于管理、构造与维护大容量的持久数据,并使它们能与大型复杂程序紧密联系。面向对象数据库正是适应这种形势发展起来的,它有以下特点:面向对象数据模型能够完整地描述现实世界的数据结构,能表达数据间的嵌套、递归的联系;具有面向对象技术的封装性和继承性的特点,提高了软件的可重用性。

2.4.2、层次数据模型(Hierarchical Model)
 1、 层次数据模型的概念
 2、层次模型的数据操纵与完整性约束
 3、层次模型的数据存取
 4、多对多联系在层次模型中的表示
 5、层次数据模型的优缺点

层次数据模型用树型(层次)结构来表示各类实体及实体间联系的数据模型。现实世界中许多实体之间的联系本来就呈现出一种自然的层次关系,如产品组成、企业行政机构、家族关系等。因此层次模型可自然地表达自然界数据间具有层次规律的分类关系、概括关系、部分关系等等,但在结构上有一定的局限性,且缺乏操作代数性质。

1、 层次数据模型的概念

在数据库中定义满足下面两个条件的基本层次联系(关系)的集合为层次模型:
 - 有且只有一个结点没有双亲结点,这个结点称为根结点;
 - 根以外的其他结点有且只有一个双亲结点。

层次结构是树结构,树的结点表示一个记录类型,记录(类型)之间的联系用结点之间的连线(有向边)表示(图2-6)。上一层记录类型和下一层记录类型的联系是1:N联系。这就使得层次数据库只能处理一对多的实体联系。

图2-6 教员-学生层次数据库

在图示结构中,每个记录类型可包含若干字段。因此,记录类型描述的是现实世界中的实体,字段描述的是实体的属性。各个记录类型及其字段都必须命名。各个记录记录类型、同一记录类型中各个字段不能同名。每个记录类型可以定义一个排序字段(称为码字段),如果定义该字段的值是唯一的,则它能唯一地标识一个记录值。

一个层次数据模型在理论上可以包含任意有限个记录和字段,但任何实际的系统都会因为存储容量或实现复杂度而限制层次模型中包含的记录类型个数和字段类型个数。如60年代由IBM公司开发实现的层次数据库管理系统IMS中规定层次模型的层次路径最长为15层,在每个层中记录类型至多包含255个字段。

2、层次模型的数据操纵与完整性约束

 层次模型的数据操纵
 层次模型的数据值域
 层次模型的结构约束

层次模型的数据操纵主要有查询、插入、删除和修改。进行插入、删除、修改操作时要满足层次模型的完整性约束条件:
 1) 进行插入时,如果没有相应的双亲结点值就不能插入子女结点值。例如在上图的教师-学生层次数据模型中,若新调入一名教师,但尚未分配到某个教研组,这时就不能将新教员插入到数据库中。
 2) 进行删除操作时,如果删除双亲结点,则相应的子女结点值也被同时删除。
 3) 进行修改时,应修改所有相应记录,以保证数据的一致性。

层次数据模型的数据结构体现了对于数据值域和数据结构方面的约束或层次数据库组织法则。对于数据值域的约束表现如下:
 1) 记录型每一属性为一基本数据型,确定了该属性值的域。
 2) 每一记录型为一元组型,即其各属性型的序列,意味作该型记录值的每一项必须为相应属性型的数据对象。
 3) 整个层次型由记录型按其从属关系依层次构成树,意味作该层次型的每一个值为由相应记录型构成的树状结构。

层次数据模型在结构上的约束可归纳如下:
 1) 记录之间的从属关系是单向的,由树的母结点指向子结点。而且,在一对母结点和结点间不存在多于一种的从属关系。这一约束限制了以单一层次模型对于现实实界中实体间多种关系的模拟。
 2) 层次模型的树结构不仅是有向的,而且是有序的,即在每一层次上各记录型的排列顺序必须确定。这一约束隐含了对层次数据库存取路径的一种控制。
 3) 在层次模型所包含的从属关系是一对多的关系。因此在一对母结点和子结点之间,对应于母结点的一个型,是位于子结点的另一个型的一个序列如图2-7所示。这就是说,在层次数据库中,从属于每一记录的是其子记录的一个序列。这一原则递归应用于各个层次,也限制了对于多对多关系的模拟。
 4) 任何记录的任何属性均为在概念上不可再分割的简单型,确切地说记录的属性只能为原子型。

3、层次模型的数据存取

 对存取路径的讨论一般可分为面向用户的概念层和面向DBMS(或OS)的系统层两个层次。
  -在概念层主要涉及到的问题是数据的标识,即如何明确地、无二义性地指明所要操作的层次数据库以及数据记录。
  -在系统层主要涉及到的问题则是数据文件的具体组织。

数据的独立性在相当程度上是以这两个层次的相互独立性为尺度的。

层次模型的一个基本特点是,任何一个给定的记录值只有按其路径查看是才能显示它的全部意义,没有一个子女记录值能够脱离双亲记录值而独立存在。

为提高检索效率,系统允许用户从当前位置开始向下访问,并保持指向当前位置母结点记录的指针。如果在一应用程序中涉及到多个层次数据库,则这些层次数据库为该程序所访问的当前位置均被记录。然而,保持当前记录的优越性是有限的,原因在于此措施只支持由此点向下的继续搜索,对于多层或跨分枝记录的检索无效。

层次数据库的存取组织有以下两种:
  - HS(Hierarchical Sequential),即层次顺序
  - HD(Hierarchical Direct),即层次直接

相应的检索方法就有以下四种
  - HSAM(Hierarchical Sequential Access Method),即层次顺序存取方法
  - HISAM(Hierarchical Indexed Sequential Access Method),即层次索引存取方法
  - HDAM(Hierarchical Direct Access Method),即层次直接存取方法
  - HIDAM(Hierarchical Indexed Direct Access Method),即层次索引直接存取方法

从以上几种方法可以看出,层次数据库的存取途径与层次结构的依赖管理,即存取路径只适合于按层次结构组织并实际存储的数据。为增加数据库除根记录以外的其他入口,可引入辅助索引,但终究是仅在必要时采取的非标准方法。

总而言之,由于层次模型中数据的存取结构域数据的逻辑结构的一致性导致层次数据库结构的逻辑上物理独立性较差。

图 2-7记录值的层次路径-层次序列码:1052023940327

层次数据库中不仅要存储数据本身,还要存储数据之间的层次关系。层次数据模型数据的存储常常是和数据之间联系的存储结合在一起的。

常用的数据存储方法有两种:
 1) 邻接法:按照层次树前序穿越的顺序把所有记录值依次邻接存放,即通过物理组织空间的位置相邻来体现(或隐含)层次顺序。例如对于图2-8
  (a) 中的数据库,按邻接法存放图2-8
  (b)中以根记录A1为首的层次记录实例集,则应按图 2-8
  (c)所示存放。

图2-8 邻接法存储结构

2) 链接法:用指引元来反映数据之间的层次联系。链接法又分为子女-兄弟链接法如图2-9(a)和层次序列链接法如图2-9 (b)。

(a)子女-兄弟链接法

(b) 层次序列链接法

4、多对多联系在层次模型中的表示

前面说过,层次数据模型只能直接表示一对多(包括一对一)的联系,多对多的联系只能通过分解才能在层次数据库中表示出来。分解的方法有两种:冗余结点法和虚拟结点法。
 - 冗余结点法:通过增加两个冗余结点将学课程多对多的联系转换成两个一对多联系;
 - 虚拟结点法:将冗余结点法中的冗余结点换为虚结点,所谓虚结点就是一个指针元,指向所替代的结点。

冗余结点法的优点是结构清晰,允许结点改变存储位置,缺点是需要额外占用存储空间,有潜在的不一致性。

虚拟结点法的优点是减少对存储空间的浪费,避免产生潜在的不一致性,缺点是结点改变存储位置可能引起虚拟结点中指针的修改。

根据这两种方法,学生与课程的多对多关系可通过图2-10表示这两种分解方法:

图2-10 多对多联系在层次模型中的表示

层次数据模型的一对多(包括一对一)这一限制只能通过定义多棵树的方法来克服。然而层次数据库系统基本上不具备联合检索多个层次数据集的功能。这一局限性对于相当数量的工程应用是难以接受的。

所以在层次数据模型推出不久,基于网状数据模型的数据库管理系统就成为研究的主要方向。

5、层次数据模型的优缺点

层次数据模型的优点主要有:
 1) 层次数据模型本身比较简单,易于理解。
 2) 对于实体间联系是固定的,而且预先定义好的应用系统,采用层次模型来实现,其性能优于关系数据库,不低于网状模型的数据库。
 3) 层次数据模型的约束条件也提供了良好的完整性支持。

层次模型的主要缺点有:
 1) 现实世界中很多联系是非层次的,如多对多联系、一个结点具有双亲等,层次数据模型表示这类联系的方法很笨拙,只能通过引入冗余结点(易产生不一致性)或创建非自然的数据组织(引入虚拟结点)来解决。
 2) 对插入和删除操作的限制比较多,编辑比较复杂。
 3) 查询子女结点必须通过双亲结点,复杂查询支持不够。
 4) 由于结构严密,层次命令趋于程序化,数据独立性。

6、基于层次模型的数据库管理系统

层次数据模型的数据库管理系统的典型例子是1969年IBM 公司推出的IMS(Information Management System)。 IMS允许用户以批处理方式和联机方式处理,其使用的主语言科可为COBOL、PL/1、370系统的汇编语言,其数据操作语言为DL/I(Data Language/I),采用Call实现方式。

IMS系统的结构:IMS系统由应用程序、程序说明块、物理数据库描述、IMS控制程序、操作系统及数据库组成。

IMS的存储结构:层次顺序( HS)组织和层次直接(HD)组织。在HS组织中又分HSAM和HISAM, 在HD组织中也分HDAM和HIDAM。每个物理数据库对应其中的一种存储结构。这四种存储数据库结构建立在操作系统所提供的存取方法基础上,IMS使用了下列存取方法:
 1、 OS/VS的顺序存取方法:SAM;
 2、 OS/VS的索引顺序存取方法:ISAM
 3、 OS/VS的虚拟顺序存取方法:VSAM
 4、 溢出顺序存取方法:OSAM

有关层次数据库管理系统IMS的详细介绍请参看清华大学俞盘祥教授主编的《数据库管理系统》教材

2.4.3、网状模型(Network Model)
 1、网状模型的概念
 2、网状模型的数据操纵与完整性约束
 3、网状数据库的存取
 4、网状数据模型的优缺点

在现实世界中事物间的联系更多的是非层次关系的,用层次模型表示非树形结构是很不直接的,网状模型则可以克服这一弊病。

网状模型的特点是:数据组织成有向图结构。结构中的结点代表数据的记录表,即元组记录的集合;弧表述位于不同结点数据间的关系,这一关系也必须是一对多的关系。然而,网状模型的有向图与层次模型的树结构不同,结点和弧构成的网状有向图具有较大的灵活性。但与层次数据模型一样,网状模型也缺乏形式化基础和操作代数的性质。

1、网状模型的概念

在数据库中定义满足下面两个条件的基本层次联系的集合为网状数据模型:
 - 允许一个以上的结点没有双亲结点;
 - 一个结点可以有多于一个的双亲结点。

网状模型的数据结构是一种比层次模型更具有普遍性的结构,它去掉了层次模型的两个限制,允许多个结点没有双亲,允许结点有多个双亲结点,此外它还允许两个结点之间有多种联系(称之为复合联系)。例如在工人与机器之间存在多种联系(图2-11),一种联系表示工人"使用"机器的关系,另一种联系表示工人"维修"机器的关系。因此网状模型可以更直接地去描述现实世界,而层次模型实际上是网状模型的一个特例。

图2-11 工人与机器的联系

在网状模型中由于记录型之间的复合联系,为了区分记录型之间不同的联系,对联系进行命名,命名的联系称之为系型(Set Type)。在联系中位于双亲结点的记录型称为主记录型或首记录型,位于子女结点的记录型称为成员记录型或属记录型。系型的性质:
 1)、一个记录型可作为几个系型的首记录型;
 2)、一个记录型可作为几个系型的属记录型;
 3)、一个记录型既可作一些系的首记录型又可作为另一个系的属记录型;
 4)、主记录型与成员记录型之间的联系不允许为M:N关系。

因此在网状数据库中存在两种型:一为记录型,用于描述实体;一为系型,用于描述实体间的关系。从局部看,一个关系型为一两级树,具有一个首记录型以及一个或多个属记录型。一个记录型可参与多个系型的构成。表达网状数据库的有向图只是其模式,其基本单位则是一个一个的系。在每一个系中,弧代表的关系仍是一对多的关系。

与层次模型一样,网状模型中的每个结点表示一个记录类型(实体),每个记录类型可包含若干个字段(实体的属性),记录(类型)之间的联系用结点之间的连线(有向边)表示,表示记录类型之间的一对多的父子联系。

从定义可以看出,层次模型中子女结点和双亲结点的联系是唯一的,而在网状模型中这种联系可以不唯一。因此,要为每个联系命名,并指出与该联系有关的双亲记录和子女记录(如图2-12所示)。

图2-12 网状模型的例子

记录值之间的联系通过系值来表示:对于一个系型可以有多个系值,每个系值有且仅有一个主记录值和0个或多个属记录值组成。例如教授和研究生之间的导师关系,教授记录型为导师系型的首记录型,研究生记录型为系型的成员记录型。对于这样的导师系型可以有多个系值(等于教师记录值的数量)。

实际商品化网状数据库系统对网状数据结构都有不同的限制,如HP公司的IMAGE3000数据库管理系统是一个网状数据库系统,但是限制网状结构的层次只有两层,是一个简化了的网状结构;这时就需要把现实世界一般的网状结构转换成系统所能处理的结构。

2、网状模型的数据操纵与完整性约束

网状数据模型一般来说没有层次模型那样严格的完整性约束条件,但具体的网状数据库系统对数据操纵都加了一些限制,提供了一定的完整性。

1) 美国数据库任务组定义的网状模型

美国数据库任务组(DBTG)在模式定义语言DDL中提供了定义网状数据模型DBTG数据库完整性的若干概念和语句,主要有:
  - 支持记录码的概念,码是唯一标识记录的数据项的集合。
  - 保证一个联系中双亲记录和子女记录之间是一对多的联系。
  - 可以支持双亲记录和子女记录之间某些约束条件。例如,有些子女记录要求双亲记录存在才能插入,双亲记录删除时也连同删除。

对于网状数据库不存在专门定义的代数操作,而是以语句直接表达操作的对象和内容。一个操作的描述一般包括所作用的记录、选取记录的条件以及操作的内容。为了简化运行时的检索路径和提高系统效率,对网状数据库的检索广泛应用"当前值"导航。

2) 网状模型的数据值域的约束

网状数据模型也体现了对于数据值域和数据结构方面的约束和法则。对于数据值域的约束表现如下:
  - 记录:无论是首记录还是从属记录,其每一属性为一基本的数据型,如字符、浮点数等,确定了该属性值的域,更详细的说明规定了每一属性所占的字节数等。然而,并不将属性值限定为某一值,允许属性值为一组值。
  - 每一记录型为一元组型,即其各属性型的序列,规定该记录值的每一项必须与相应属性型符合。
  - 每一系型由最多一个系首记录型和一个或多个属记录型构成,规定其每个值为由相应记录型组成的二级树结构。

3) 网状模型的结构法则

在构造方面网状数据模型较层次数据模型灵活,其主要结构法则概括如下:
  - 记录之间的关系是单向的,从每个系的首记录指向属记录,表示后者对于前者的函数依赖。然而,一个记录型可参与多个系的组成,它可为多个系的首记录型,或者为多个系的属记录型,或者为某些系的首记录型和另外一些系的属记录型。不过,单向关系这一约束还是限制了在同一个系中对于双向关系的模拟。
  - 系型中首记录型和属记录型的关系为一对多的关系。即在一系型实例中,对应于每一首记录的是一个从属记录的集合(一般为有序集)。这一原则限制了多对多的关系的模拟。
  - 记录型的属性可为非原子型,即一记录的属性值可不限于单一数据项,而可为数组,甚至为多维数组,其中数组的所有元素均属于同一个型
  - 允许以单一记录型来构成一个系,称作奇异系,或无首系。奇异系的引入出自以下两个目的:一是模拟某一类实体而不描述它与其它实体间的联系;二是某类属记录提供由系统直接(不通过其首记录)检索的路径。
  - 在任何系中,一属记录最多只能对应于一个首记录,即其不能属于同一系的不同系值。
  - 记录型间递归定义的关系,即同一记录型既是一系的首记录又是其属记录的情况,这种情况在相当多的网状数据库中是不允许的。

4) 网状模型的语义约束的控制

网络数据模型具有支持对语义约束的控制,表现在以下方面:
 - 记录标识唯一性约束:一记录可包含一个或多个键(关键字)。一个键包含一个或多个数据项(属性值),用来唯一地标识这一记录。
 - 属性值域约束:网状数据描述语言包括一个CHECK子句,用以限定简单数据项的值域,或说明属于同一记录的简单数据项之间的关系。
 - 系属约束:系属约束确定了在一个系中首记录与属记录间的联结性质,说明如何建立和切断二者之间的联结,即属记录如何加入或退出一个系。因此,系属约束用于控制属记录对于系的插入和移出操作。
 - 控制属记录退出的约束,即所谓的留驻约束有:
  (1) 固定约束:即一记录一旦成为某个系值的属记录,就不可移出或作为其它系值的属记录,除非将其删除;
  (2) 强制系属:即一记录一旦成为某个系则不可移出,但可从一个系值转移到另一同型系值;
  (3) 随意系属:一属记录可与某个系在任何情况下相联或退出,即不仅可移至同一系的其它系值,还可解除其与该系之间的逻辑关系
 - 控制属记录加入系的约束,即所谓的插入约束有:
  (1) 自动系属:当为某个型的记录生成后,立即成为以该型为属记录型的系值的属记录,即系统在将该记录存入数据库时立即将其逻辑地插入到合适的系值;
  (2) 手工系属:一记录在生成时并不具备任何系属,而取决于用户在必要时通过数据库语言指定其系属。

3、网状数据库的存取

在网状数据库中,每一记录具有唯一的内部标识。但该内部标识在很大程度上是供数据库关系系统管理之用的,而非主要用作用户检索的参考。

数据的组织在逻辑上通过存放方式和系值来表达。前者体现了对记录的存储策略,后者体现了对记录所属系值的确定。

在网状数据库中,记录的存放方式有以下三种:
   经由系存放:将一属记录加入其所属的一个系
   直接存放:按照DBK存放
   杂凑存放:用户程序通过某种杂凑算法生成计算码,供DBMS作为存放数据项的依据。系值的选择,即确定一记录所属系值,主要有以下方式:
   1) 通过系统的当前值来完成,而当前值则取决于当前运行的应用程序(SET SELECTION IS BY APPLICATION)
   2) 以系统为首记录的单值系(即奇异系的系名选择)(SET SELECTION IS THRU set-name SYSTEM)
   3) 通过首记录的关键字值来进行的(SET SELECTION IS BY VALUE OF item IN record-)
   4) 通过结构上的约束条件(SET SELECTION IS BY STRUCTURAL condition)

网状数据模型的存储结构中关键是如何实现记录之间的联系。常用的方法是链接法,包括单向链接、双向链接、环状链接、向首链接等。此外还有其他实现方法,如指引元阵列法、二进制阵列法、索引法等依据具体系统不同而不同。

4、网状数据模型的优缺点

1) 网状数据模型的主要优点有:
  - 能够更为直接地描述现实世界,如一个结点可以有多个双亲;
  - 具有良好的性能,存取效率较高。

2) 网状数据模型的主要缺点有:
  - 结构比较复杂,而且随着应用环境的扩大,数据库的结构就变得越来越复杂,不利于最终用户掌握;
  - 其数据定义语言DDL,数据操纵语言DML语言复杂,用户不容易使用:由于记录之间联系是通过存取路径实现的,应用程序在访问数据时必须选择适当的存取路径,因此,用户必须了解应用系统的数据结构的细节,加重了编写应用程序的负担。

随着对象数据技术的出现,层次数据模型和网状数据模型的很多概念对指导对象数据库的设计仍然有用。与关系数据库相比,数据之间的联系在层次和网状数据库系统中是用存取路径来表示和实现的,因此素据的物理独立性没有关系好,使用起来没有关系模型那么方便。

2.4.4、关系模型(Relational Model)

关系模型是目前最应用最广、理论最成熟的一种数据模型。

与前两种模型相比,关系模型比较简单,容易为初学者接受。

关系模型是由若干关系模式组成的集合。关系模式相当于前面提到的记录类型,它的实例称为关系,每个关系实际上是一张表格。

关系数据库的主要特点可列举如下:
 - 关系数据模型以集合论、关系代数为基础,在数据建模和操作方面具有严格的数学基础。关系数据库理论为一自成体系的形式化理论。
 - 在结构层次的数据模型中,关系模型具有较高的数据独立性。
 - 相对于层次模型和网状模型,关系模型将被模拟系统划分为较小的单元,具有较少的结构约束和较大的灵活性,对数据共享的支持也较强。
 - 由于关系理论和一阶逻辑的共同数学基础,在关系数据库与逻辑程序之间存在自然联系,这一事实为发展演绎数据库及其应用奠定了理论基础。

1、 关系模型的概念

关系模型与前面的层次模型和网状模型不同,它是建立在严格的数学概念的基础上的。严格的定义请参照附录中相关的数据库原理参考书。这里只简单勾画一下关系模型。

在用户观点下,关系模型中数据的逻辑结构是一张二维表,它有行和列组成。

关系是一组域之笛卡尔积(Cartesian Product)的子集,给定一组域D1,D2,…,Dn (可包含相同域),其笛卡尔积为:

D1*D2**Dn = {(d1,d2,…,dn) | di∈Di, I=1,…,n}

其中,每一元素(d1,d2,…,dn)称作一个n元组(Tuple)简称元组。一个关系R即为上述元组的集合,且R∈D1*D2*…*Dn

就概念而言针对关系的性质,有必要进一步说明如下概念:
 - 关系是元组的集合。因此各个元组在关系中的顺序是无关紧要的。然而有两点必须注意:其一就是在任何实际系统中一个关系的各元组是具备一定存储顺序的,而这顺序往往被用作索引的依据,在这种情况下元组的顺序对用户透明,从用户观点看来在逻辑上各元组并不具备顺序;其二就是在某些特殊场合,人们有必要强制元组具备顺序并人为地给每一元组加上序号。
 - 属性和域在概念上是有区别的。属性从属于一定的域,反映了该域在描述关系中的应用。一般而言,域与一定的数据结构和值的集合相关联,而属性则与关系的语义相关联。从属于同一域的属性可有多个并可分别命名。
 - 每一元组的任一属性值为概念上不可再分解的原子值。换言之,在关系二维表中每行每列位置上的值都是原子值,而不是集合、元组或其集合。满足这一条件的关系称作为规范化的关系。
 - 允许属性值为空。即所谓的空值(Null Value),用以表达未知情况。空值的引入支持了对不完全信息的处理。对于谓词结构的回答也由"是"、"否"二值扩充到"是"、"否"、"不知道"三值。
 - 键值或关键字。是唯一确定一元组的一个属性值或多个(以至全部)属性值之复合。

关系模型举例说明

现在以学生登记表为例(图2-14),介绍关系模型中的一些术语。

图2-14学生登记表

- 关系(Relation):一个关系对应通常说的一张表;
 - 元组(Tuple):表中的一行即为一个元组;
 - 属性(Attribute):表中的一列即为一个属性,给每一个属性起一个名称即属性名;
 - 主码(Key):表中的某个或某些属性,它可以唯一确定一个元组;
 - 域(Domain):属性的取值范围;
 - 分量(Value):元组中的一个属性值;
 - 关系模式(Schema):对关系的描述,一般表示为:关系名(属性1,属性2,…,属性n);
 - 关系模型的规范化(Normalization):即要求关系必须满足一定的规范条件,这些规范条件中最基本的一条就是,关系的每一个分量必须是一个不可分的数据项,也就是说,不允许表中还有表,如图2-15中的工资和扣除是可分的数据项。关系模型的范式主要有:1NF、2NF、3NF、BCNF、4NF、5NF这六种,其中第一范式1NF是最基本的,其它范式主要是消除某种数据冗余而提出的。

图2-15职工工资表

2、关系数据模型的操纵与完整性约束

关系数据库的操作主要包括查询、插入、删除和修改数据。这些操作必须满足关系的完整性约束条件。

关系的完整性约束条件包括三大类:实体完整性、参照完整性和用户定义的完整性。

关系数据模型体现了对于值域、数据结构及相互依赖方面的约束,也是关系数据库组织法则。

对于数据值域的约束表现如下:
 - 关系的每一属性为一原子数据型,其值来自所从属的域,且必须为原子值,即属性是概念上不可再分的数据项。
 - 每一关系为一数据型,这一数据型又由各属性型为部件构成,一般称作元组型。任一元组必须为相应元组型的数据对象。

关系模型在结构上约束主要有以下几点:
 - 同一关系任意两个元组不可全同,即作为元组之集合,不可有相同元素。
 - 构成键值的属性值不可为空值,否则无法起到唯一标识的作用。
 - 对于一关系中可作为键或可参与复合键构成的属性,其值必须存在于一关系(可为同一关系或另一关系)的键值中(除非该值为空值)。

关系模型也具有对语义约束条件的控制,包括以下几个方面:
 - 静态约束:这类约束是用于数据库在任一时刻的状态,又可划分为:针对某一特定属性的域的约束;针对某一元组中属性值之间关系的约束;针对整个关系统计特性的约束(即将某一属性与各元组属性(或同域属性)值的总和、数学期望、均方根等相比较后应满足的条件)。
 - 动态约束:动态约束是指数据库状态变迁前后值之间应满足的条件。例如"工资可升不可降"的约束。
 - 依赖约束:关系数据库间的依赖关系也是动态约束的一种。

但对工程数据库应用而言,关系模型如此单一的存取方式则显得功能不足,例如不能有效地支持聚合和概括的概念。

3、关系数据模型的存储结构

在关系数据模型中,实体及实体间的联系都用表来表示。在数据库的物理组织中,表以文件形式存储,有的系统一个表对应一个操作系统文件(人们常称为小文件数据库),有的系统自己设计文件结构(人们常称为大文件数据库)。

1)视图的概念

关系数据库的重构仍为关系,包含某一现有关系的一部分或若干现有关系的组合。这样的重构数据称作为关系视图。关系视图相关的数据并不常驻于关系数据库,即关系中不存在对应于关系视图的实际文件。
 关系视图是在必要时由系统根据保存在属据辞典中的视图定义即时产生的,其存在时间可以是一次性的,也可以持续于一应用程序的整个执行过程,并在该过程中被多次使用。

2)工程应用中物化视图的概念

在工程数据库环境中,兼顾相应时间、存储空间和实际应用的需要,有关视图的数据存储可采用以下几种方式:
 1) 关系视图生成后即常驻于系统中,并伴随其源关系的每次更新而重构。其特点是相应迅速,适用于经常被检索的关系视图,但占据一定存储空间。
 2) 关系视图生成后即常驻于系统中,只有被检索时才根据自上次生成后的源关系是否更新而确定其自身是否需要重构。与前面方法相比,可减少某些不必要的重构次数,但在需要重构时延缓相应速度。
 3) 关系视图不常驻于系统中,但在一数据库应用程序执行的全过程中保存于系统中,以便多次查询。在该程序运行以外的时间则不占据存储空间。
 4) 关系视图不常驻于系统中,只在每次被检索时临时生成。这是最常见的方法,以牺牲响应时间来换取存储空间的节省和管理上的方便(例如不必跟踪源关系是否更新等等)。

3)视图的操作

对于关系视图的检索在用户看来与对于实际关系的检索并无区别。然而,针对关系视图的更新则有一定的限制:指对于构成关系视图的(实)源关系基础数据的更新,必须确保这样的间接更新具有确定的语义。在现有系统中,一般将"可更新"的关系视图限制于满足以下条件:
 - 以单一实关系为源关系的关系视图;
 - 关系视图中的每一元组对应于源关系中一可唯一标识且不同的元组;
 - 关系视图中的每一列对应于源关系中一可唯一标识且不同的列。
 满足上述条件的关系视图在每一项都可与源关系中的响应项精确对应,使得对于关系视图的更新可无二义性地映射到对源关系的更新。
典型的"不可更新"的关系视图有以下几种:
 - 在生成时有重复元组被消除的关系视图;
 - 存在经计算而获得的属性值的关系视图;
 - 由多个关系连接而来的关系视图。

4)视图的意义

关系视图机理的引入主要具有以下意义:
 - 用户可根据需要定义不同的数据库外模式,从而增强系统的针对性。
 - 用户可获得演绎信息以处理不直接针对关系的查询,从而扩大系统的应用面;
 - 系统管理者可利用视图机理,仅向某些用户提供置于关系视图中的信息而封锁其对源关系的直接查询,达到对某些数据保密的目的。

SQLServer的数据库存储结构
 1). 所有数据库都有一个主数据文件(.mdf)和一到多个事务日志文件(.ldf)。一个数据库可能还会拥有辅助数据文件(.ndf)。这些物理上的文件即有操作系统文件名也有能用在Transact-SQL语句中的逻辑文件名
 2). 用户创建数据库时,包含系统表在内的model数据库的一个拷贝就被拷贝到这个数据库。一个数据库的最小尺寸必须大于或等于model数据库的尺寸。
 3). 数据库存储在若干称为页的以8K字节为单位的连续磁盘空间块中。也就是说一个数据库能在每一兆字节中存储128页
 4). 行不能跨页。因此,单个行的最大数据量为8092
 5). 表和索引存在盘区中,一个盘区是8个连续的页,或64K字节。因此,一个数据库每1兆字节中有16个盘区。
 6). 事务日志文件保存所有当系统出错时要恢复数据所需的信息。却省情况下,事务日志记录的尺寸是数据文件的25%

4、 关系数据模型的优缺点

关系模型中的数据操作是集合操作,操作对象和操作结果都是关系,即若干元组的集合,而不象非关系模型中那样是单记录的操作方式。另一方面,关系模型把存取路径向用户隐蔽起来,用户只要指出"干什么"或"找什么",而不必详细说明"怎么干"或"怎么找",从而大大地提高了数据的独立性,提高了用户生产率。

1) 关系数据模型的优点
 与层次数据库和网状数据库相比,关系数据的存取途径十分简单。主要原因是:
  - 关系概念模式对物理模式的高度独立性;
  - 关系之间的相互独立性。
与层次、网状数据模型相比,关系数据模型具有下列优点:
  - 关系模型与非关系模型不同,它是建立在严格的数学概念的基础上的。
  - 关系模型的概念单一。无论实体还是实体之间的联系都用关系表示。对数据的检索结果也是关系(即表)。所以数据结构简单、清晰、用户易懂易用。
  - 关系模型的存取路径对用户透明,从而具有高度的数据独立性,更好的安全保密性,也简化了程序员的工作和数据库开发建立的工作。

2) 关系数据模型的缺点
 当然,关系数据模型也有缺点,其中最主要的缺点是,由于存取路径对用户透明,查询效率往往不如非关系数据模型,因此为了提高性能,必须对用户的查询请求进行优化,增加了开发数据库管理系统的难度。

3) 传统数据模型的总结
 层次与网状数据库特点是清晰确定记录之间的关系,作为数据库设计过程的一部分,大多用内部指针实现,提供了从一个记录的当前值到另一个记录的当前值间快速导航,使事务处理系统达到了高性能,使用也容易。以CODASYL标准为依据的网状数据库,提供了很强有力的数据结构能力,改善了数据独立性。但层次/网状数据模型不能预先设计所有可能需要的记录之间的联系,必须另外预测如何随着时序的变化的要求和为改善数据独立性要预先定义的数据结构。在导航中记录时序的代码工作是困难和繁重的。所以在70年代提出了关系型数据模型,关系模型能让数据结构演化,无需对已存在的数据库和应用程序进行改造。
 关系型数据库的特点是简单数据结构,对数据和表之间关系的所有存取是基于值进行的。一个数据的值是由表的名字、列名和行名的唯一标识符(主关键字)决定,表之间的联系基于相同的值。而结构化数据库系统是基于内部指针和物理地址的记录之间导航,而以关系为基础的存取在某些方面也不充分,需要改善其性能才能在商用出路上上占压倒优势。
 无论是关系型DBMS系统,还是任何其他的传统DBMS系统,都有一个应用领域的市场占领问题,他们不可能能解决所有的领域的实际问题,诸如CAD/CAM和CASE工程的应用,关系型数据模型就不能解决,关系型在针对查询简单的数据结构是完美的,但对传统的事务处理系统,缺乏处理复杂数据结构的能力。所以从七十年代末开始人们就开始研究新的数据库模型。面向对象的DBMS也应运而生了。

2.4.5、面向对象模型(Object Oriented Model)

1、面向对象数据模型的数据结构

  对象(Object)
  对象类(Class)
  继承(Inheritance)
  多态(Polymorphism)
  动态联编(Dinamic Binding)
  对象标识符(OID)

基本概念

面向对象模型最基本的概念是对象(Object)和类(Class)。对象是现实世界中实体的模型化,与记录概念相仿,但远比记录复杂。每个对象有一个唯一的标识府,把状态(State)和行为(Behavior)封装(Encapsulation)在一起。其中,对象的状态是该对象属性值的集合,对象的行为是在对象状态上操作的方法集。共享同一属性集和方法集的所有对象构成一个类。类的属性值域可以是基本数据类型,也可以是类,或由上述值域组成的记录或集合。也就是说,类可以有嵌套结构。系统中所有的类组成一个有根的有向无环图,叫类层次。上层称为超类(SupperClass),下层称为子类(SubClass)。

面向对象数据模型的主要思想

应用领域对数据库的要求各种各样,那么与其单纯根据应用的要求去设计一个个的数据模型,还不如为数据模型增强可扩充性,由用户根据需要,利用数据模型提供的手段定义新的数据类型和相应的约束和操作。面向对象数据模型吸收了面向对象程序设计语言和抽象数据模型的主要思想,借鉴了语义数据模型等的思路,是在应用中逐步形成和发展起来的。

面向对象模型与数据库技术的结合主要体现在以下几个方面:

 1) 扩充关系数据库管理系统:在关系数据库中允许用户定义新数据类型,从而在用户定义新的抽象数据类型(Abstract Data Type)时需要实现这个类型。抽象数据类型的定义包括数据、数据之间的关系和基本操作等的定义。通过对ADT类型的定义体现对象技术在数据库中的应用。
 2) 支持持久对象的程序设计语言:在面向对象程序设计语言OOP中增加新的功能,使它的数据成为持久的、可共享的,并使它的程序执行成为原子的。这种方法所涉及的问题包括:是否所有的类型都能成为持久的;如何实现数据的持久性,类型系统和类型安全性;支持透明的导航和持久数据结构的垃圾收集技术等。
 3) 面向对象的数据库管理系统:研究的问题包括:数据模型、查询语言、索引技术、查询优化、处理技术、系统结构、版本管理、用户界面等。目前市场上出现了很多商品化的面向对象的数据库管理系统,典型产品有Gemstone、Orion等。
 4) 数据库系统工具包/部件:任何一种DBMS在功能上都不能满足范围广泛的下一代应用的所有需求,因此,可只提供一种DBMS核心和工具包,以便让高级用户在各个层次上对数据库系统进行扩充,以满足不同应用领域的需求。

对象(Object)

对象(Object)结构包括以下几个部分
   属性(变量):包含该对象数据,相当于关系模型中的关系的属性(当然属性的类型比关系模型丰富得多)。
   消息:查询对象、激活对象、请求对象时,向对象发送消息,对象对此做出响应。消息可以有零个或多个参数。
   方法:实现一个消息的代码段;一个方法返回一个值作为对消息的响应。
   封装:对象的物理表示只对对象的实现者是可见的,对使用者是封装的。

消息和方法提供了从外部访问对象的唯一途径。消息和方法是访问对象的基本途径,但二者的概念是不同的:消息并不意味着物理信号的传递,它指的是对象间请求的传递。可以将消息作为一个过程来实现。方法是一段代码,其中:
  1) 只有对象自己的变量才能直接引用。
  2) 其它对象的数据只能通过发送消息来引用。
  3) 方法可以分为只读和更新两种。

例如:职工对象有年薪变量,可以通过向其发送annual-salary消息来查询年薪数额。将该消息实现为一个方法,不同职工(经理、普通职工)年薪计算方法不同,但提供的外部接口是一致的。从而对象内部方法的改变不会影响到系统的其它成分。

对象模型的根本优点在于将数据从被动型转变为主动型,是真正的独立实体,拥有自己的操作,一经定义就取得与原来存在的对象同等的地位。这一点为系统的扩充和重用提供了良好的基础:关系数据库主要提供的是增加和删除记录的能力,而面向对象数据库主要提供在对象中嵌入方法的能力,因而使得数据库可以嵌入很多的操作,而在关系数据库中,这些操作需要应用程序来完成。

对象类(Class)

许多相似的对象被分组形成一个类;每个这样的对象称为类的一个实例。一个类中的所有对象有相同的:
   变量类型
   消息接口
   方法

对象和类是型与值的区别。类类似于关系模型中的关系模式(即实体-关系模型中的实体集)。这样的关系使类成为许多对象的"代言人",而从数据库设计和实现的角度看,有利于组织有效的访问机制。同一类的实例可以聚族(cluster)存放,并能容易地进行索引。

继承(Inheritance)

类的子集也可以是类,称为子类(subclass)。子类可以继承父类的属性和方法,同时增加自己的属性和方法。继承(Inheritance)不仅减少了数据类型的重复定义,增加了代码的重用性,而且为实现对象的多态打下基础。

多态(Polymorphism)

多态(Polymorphism)是面向对象技术中的重要概念,也是面向对象区别于其他方法的主要特征之一。由于相同的消息传递到不同的对象时可能对应同名但不同实现的方法,从而得到不同的结果,使得对象之间可以组成一个体系,这个体系对外提供统一的接口,但内部有不同的实现方式,根据运行时的状态选择采用哪种实现。这种接口和实现分离的方式对实现数据库面向应用的目标提供了更高层次的手段。

动态联编(Dinamic Binding)

动态联编是面向对象技术的一个共同特性。联编是使一计算机程序彼此关联的过程。对通常的程序设计语言来说,联编一般出现在编译期间,利用早期或者说静态联编,所有联编都在程序开始运行前被确定。面向对象的语言经常采用一种所谓迟联编的方法。联编过程是相同的,但动态联编是出现在程序运行时的。

动态联编是对多态性的实现结果。当运行面向对象的程序时,对象接受消息。通常处理消息的方法存在类层次的高处。该方法在需要时被动态确定。接着,当在此方法与局部于该对象的数据之间进行联结时就出现了联编。换句话说,联编出现在最晚的可能时刻。

对象标识符(OID)

对象标识(Object Identifier,OID)为每个对象在数据库中提供永久的唯一性标示符。在面向对象的数据库中,OID由系统产生,对用户透明:
   每个对象是类的一个实例,对象标识符唯一标识了一个对象。
   OID在对象生成时产生,在撤消对象时被注销。
   OID类似于人的身份证,网状数据模型DBTG系统中的DBK。
   OID不随对象值的改变而改变。
   两个具有相同值的对象其OID是不一样的。
   OID可以作为对象的一个字段存储,也可以在一个对象中引用其它对象的OID。

2、对象模型的的数据操纵与完整性约束

在面向对象的数据库中,对象必须是封装的。对象与外部通过消息传递信息。消息传送给对象,启动相应的方法,进行相应的操作,然后把结果通过消息返回。消息是外界与对象联系的唯一途径。封装使外界只需关心方法的接口,而方法的实现是对象内部的事情,不会对外界造成任何影响。所以方法由接口和实现两部分组成。从软件工程角度看,这是符合模块分离和低耦合原则的,有利于保持数据的独立性。同时封装可以防止一些非法操作造成的副作用。

在面向对象的模型中,数据的完整性通过对象方法的限制条件和对象本身一起放在数据库中。这保证了每次有应用程序访问数据时都在进行完整性检查。所以面向对象的完整性可以提供实例级限制:多数传统性完整性限制是作用于相同类型的所有数据项,而实例级限制可作用于数据的子集或子类。例,有一个职员,由于突出的工作能力而被提升工资,并超过了其他职员所不能超过的工资限额。通过该子类机制把一个实例限制添加到职员工作便可以实现之,而不必改变其他职员的工资限额。另外,面向对象方法局域化了条件代码,因而当限制条件改变时可以很容易地更改数据库。

面向对象数据库用来防止条件破坏的一种方法是例外机制。数据库中遇到例外情况时,通过建立一个例外对象产生一个例外,并把控制交给适当的例外处理器。然后,处理器询问例外对象有关例外情况的信息。由于例外是一个对象,因而它具有类型,并且可以将例外按相似程度分类,每一种类型的例外都对应于一个例外处理器。

触发器是完整性限制的另一种手段。触发器是与数据库中特定数据项相关联的机制,每当试图访问或修改数据项时,它即被激活。触发器检查对数据项是否有非法的或不正确的操作。触发器还可以执行修改操作,以保持数据库的一致性。面向对象数据库通过控制方法调用而提供了实现触发器的一种独特方式。由于数据只可以通过方法访问,因而,数据库可通过控制访问数据的方法以及在方法调用时激活相应的触发器来识别对数据修改的企图。

3、对象模型的的存储结构

 1)类的存储
 2) 对象实例的存储结构

对象存储与对象标识的概念紧密相关:对象标识要求每个对象都有一个与之唯一对应的、无论对象是否改变都不会改变的标志。对象标识使各对复杂关系的有效处理能够进行。若对象相互间的引用都是通过其唯一的对象标识实现的,那么,即使对象的状态或位置改变了,也不会影响到对象之间的关系。对象标识与基于值的数据库,如关系数据库不同,在关系数据库中,实体是通过它们的主属性标识的,因而可能随时改变。换句话说,对象标识对于对象关系的持久性维护是有用的。这种对象及其之间关系的永久性需要一种不同于关系数据库中所用的删除机制。因而,许多面向对象数据库不立即删除对象,而是删除对该对象的引用。当所有对被删除对象的引用都被删除之后才删除该对象,然后收回该对象所占空间。

对象标识符可用若干不同的方法构造,它们各有利弊。ORION中所用方法为:一个对象标识符用一个二元组(类标识符和实例标识符)。其中类标识符为该对象所属类的标识符,而实例标识符是该类或整个数据库中该实例的标识符。在分布式系统中,对象标识符还必须加上场点标识符。这种方法有一个好处,当一条消息发送给某个对象时,系统可以从指定的对象标识符中截取该对象的类标识符,而不必首先获取对象本身。系统必须查看对象以决定这条消息是否有效。如果消息有效,它就接着获取该对象并且发送相应的方法。类对象可以隐含起来以优化系统性能。但是这个方法也有缺点:即把对象从一个类移到另一个类时开销很大。而且,一个对象可以引用任意多个其他对象,也可以被任意多个其他对象所引用。这就是说,如果一个对象的类标识符改变了,那么所有其他对象对该对象的引用就变得无效了。找出所有这样的对象并且将它们的引用修改成新标识符,开销自然十分巨大。

如一个对象在应用程序结束之后还继续存在,则该对象被称为具有永久性的:对象的持久性。对象的持久性是将一个瞬态对象变为持久的的方法,包括:
   (Class)按类持久:声明一个类中所有对象都是持久的。简单但缺乏灵活性,有时一个类中可以同时有瞬态和持久对象。
   (Creation)按创建持久:扩展创建瞬态对象的语句来创建持久对象。
   (Marking)按标志持久:所有对象被创建为瞬态的,需要持久的对象在程序结束前显式地标识为持久的。
   (Reference)按引用持久:一个或多个对象被显式地声明为(根)持久的;其它被根对象引用(直接地或间接地)到的对象被看作是持久的。

1)类的存储:

类作为一组对象的说明而存在。它是被作为一种特殊的对象来处理的。在ORION中将类和对象实例分开存储,同时类指出属于它的对象实例的位置。所有的类聚集为索引结构。索引的根保存在数据库的系统目录表中,这样在存取对象和向对象发送消息时,必须根据系统目录表中的类索引的根找到相应类的描述,以便进行语义的解释和方法的调用。类的持久存储格式如图2-16所示:

图 2-16 类的存储格式

当一个类作为其他类的属性或超类时,我们称类被引用。上图中的引用次数就是用来记录类被引用的次数。我们将类的属性和方法用单独的记录块存储,这些记录按照属性(主要是静态属性)和方法的名次分别建立两个索引,索引的根存储在类的定义中。属于该类的实例被聚集在某个索引之下,索引的根存放在实例索引域。超类表是一个含有超类信息的表,其中存放的是超类的个数以及各超类的标识。

2) 对象实例的存储结构

对象实例的存储格式类似于关系结构,一个对象并不组织成单个的文件,而是以记录方式存储。这样,尽管一个对象具有十分复杂的结构和较多的层次,都可以连续地存放或以物理指针直接索引。对象实例的存储结构如图2-17所示:

图 2-17 对象实例通用存储格式

在存储格式中,除了存储对象实体属性外,还存储它所属的类标识符和与其他对象的关联。其中,实例标识符是一个对象的全程唯一标识符;对象长度和属性个数记录了以磁盘格式存储的对象总长度及属性的个数;属性向量由具有明确指定值的所有属性的属性序号、数据类型和长度组成。一个属性可以是用户定义也可以是系统定义的。系统定义的属性包括版本号和时间戳,它们分别用于版本化对象以及需修改报告的对象。一个属性本身是系统类属性中的一个实例,它也有唯一的标识符。关联域可以是一个原始值,也可以是另外一个实例的参照值,即参照实例的标识符。

属性的存储格式如图2-18所示:

关联域的存储格式如图2-19所示:

一个对象实例完整的存储格式如图2-20所示:

属性的存储格式如图2-18所示:属性序号表示存储属性在系统中的唯一标识;数据类型表示存储属性的类型;长度表示存储属性的长度;数据表示实际存储的数据。

图 2-18 属性的存储格式

关联域的存储格式如图2-19所示:关联类型表示关联域的类型;关联类标识符表示存储关联类的标识符;关联实例标识符表示存储关联实例的标识符。

图 2-19 关联域的存储格式

所以,一个对象实例完整的存储格式如图2-20所示:

图 2-20 对象实例的存储格式

4、面向对象模型的优点和局限性

面向对象数据模型比之传统数据模型的根本区别是面向对象模型是面向应用的。它提供了丰富的语义和自然的表达方式,能方便地直接表达应用领域的事物和它们之间的联系,克服了传统数据模型的主要缺点。另外面向对象模型为数据库的分析、设计和实现提供了一个统一的数据库模型,它不但是一个概念模型,还是一个结构模型。面向对象程序设计技术的主要优点都能在面向对象数据库中得到体现。

目前,面向对象数据模型最大问题是没有一个统一的标准,并且缺乏一个完善的理论来指导,因此面向对象的数据库更多地带上领域的印记,在不同的领域有着不同的表现。尽管有许多商品化的ODBMS,但它们在程序设计接口、实现方法(手段)、对查询的支持等方面都存在许多差异。其次,面向对象的数据库产品在一些方面仍然落后于关系数据库产品,例如,还没有OODB支持视图机制,并且在这方面的先前研究也未真正展开;模式化在OODB中更为落后,许多OODB产品仍然停留在类似CODASYL风格的模式/应用编译周期上;OODB与它们的应用程序语言紧密集成,许多系统仅提供一种语言(大多为C++);除此以外,OODB的鲁棒性、可伸缩性和容错性都难以赶上关系数据库系统。

在开发工具、C/S计算环境相关的一些方面在存在不少问题。例如在工具方面,OODB明显缺乏最终用户工具及应用开发工具,而这方面的工具在关系数据库中却得到了广泛的应用。

最后,OODB的商业市场的增长速度比预想的要慢得多,一些应用领域,如CAD,原指望很快就会从文件系统转移到OODB上来,可事实并非如此;另外值得指出的是,一些大型数据库厂商并未转移到OODB上来,而是在传统的关系数据中扩展,将面向对象技术与数据库技术结合起来,提供对于复杂数据进行复杂查询的支持。

前面我们讨论了数据库技术中最常用的四种数据模型:层次数据模型、网状数据模型、关系数据模型、对象数据模型。基于这几种数据模型,数据库厂商都开发了相应的数据库管理系统。目前的发展趋势是将对象-关系模型相结合,在关系数据库管理系统中引入对象概念是各数据库厂商研究开发的主要方向。如Oracle从8.15i开始就支持对象模型的概念,提出了物化视图、行类型(Row Set)、Collection对象(Array,Set,List等)对象;IBM公司的DB2通过扩展的Extender支持对象-关系模型能力的表达。

除了这些常用的结构数据模型外,在数据库界研究的还有实时数据模型、演绎数据模型、XML数据模型等。传统的关系数据库管理系统除了需要扩展对象功能外,对XML数据模型的支持也是一个方向。

有关这方面的文献请参看Db2和Oracle相关的用户手册。

 

组织简介 | 联系我们 |   Copyright 2002 ®  UML软件工程组织 京ICP备10020922号

京公海网安备110108001071号