数据库技术的发展.docx
《数据库技术的发展.docx》由会员分享,可在线阅读,更多相关《数据库技术的发展.docx(43页珍藏版)》请在冰豆网上搜索。
![数据库技术的发展.docx](https://file1.bdocx.com/fileroot1/2023-1/25/6ba62d91-c9f3-4b11-9fef-04c340bc9983/6ba62d91-c9f3-4b11-9fef-04c340bc99831.gif)
数据库技术的发展
第8章 数据库技术的发展
随着计算技术和计算机网络的发展,计算机应用领域迅速扩展,数据库应用领域也在不断地扩大。
尤其从20世纪80年代开始,数据库技术在商业领域的巨大成功刺激了其他领域对数据库技术需求的迅速增长。
一方面,新的数据库应用领域,如计算机辅助设计/管理(CAD/CAM)、过程控制、办公自动化系统、地理信息系统(GIS)、计算机制造系统(CIMS)等,为数据库的应用开辟了新的天地,另一方面,在应用中管理方面的新需求也直接推动了数据库技术的研究与发展。
以关系数据库为代表的传统数据库已经很难胜任新领域的需求,因为新的应用要求数据库能处理复杂性较高的数据,如处理与时间有关的属性,甚至还要求数据库有动态性和主动性。
这样就必须有新的数据库技术才能够满足现实需要。
为了满足现代应用的需求,必须将数据库技术与其他现代信息、数据处理技术(如面向对象技术、时序和实时处理技术、人工智能技术、多媒体技术)“完善”地集成,以形成“新一代数据库技术”,也可称为“现代数据库技术”,如时态数据库技术、实时数据库技术和多媒体数据库技术等。
本章将对数据库新技术的部分内容进行概括性的介绍。
8.1数据库新技术的分类
数据库技术自20世纪60年代中期,已从第一代的网状、层次数据库系统,第二代的关系数据库系统,发展到第三代以面向对象模型为主要特征的数据库系统。
而且随应用需要的不断提高,数据库技术也面临许多新的挑战,同时也产生许多新的数据库技术。
数据库技术与网络通信技术、人工智能技术、面向对象程序设计技术、并行计算技术等互相渗透,互相结合,成为当前数据库技术发展的主要特征,涌现出各种新型的数据库系统,新一代的数据库技术主要体现在以下几个方面:
(1)整体系统方面:
相对传统数据库而言,在数据模型及其语言、事务处理与执行模型、数据库逻辑组织与物理存储等各个方面,都集成了新的技术、工具和机制。
属于这类数据库新技术的有:
●面向对象数据库(Object-OrientedDatabase);
●主动数据库(ActiveDatabase);
●实时数据库(Real-TimeDatabase);
●时态数据库(TemporalDatabase)。
(2)体系结构方面:
不改变数据库基本原理,而是在系统的体系结构方面采用和集成了新的技术。
属于这方面的数据库新技术有:
●分布式数据库(DistributedDatabase);
●并行数据库(ParallelDatabase);
●内存数据库(MainMemoryDatabase);
●联邦数据库(FederalDatabase);
●数据仓库(DataWarehouse)。
(3)应用方面:
以特定应用领域的需要为出发点,在某些方面采用和引入一些非传统数据库技术,加强系统对有关应用的支撑能力。
属于这类的数据库新技术有:
●工程数据库(EngineeringDatabase),支持CAD、CAM、CIMS等应用领域;
●空间数据库(SpatialDatabase),包括地理数据库(GeographicDatabase),支持地理信息系统(GIS)的应用;
●科学与统计数据库(ScientificandStatisticDatabase),支持统计数据中的应用。
●超文档数据库(HyperdocumentDatabase),包括多媒体数据库(MultimediaDatabase)。
以上这些形成了现代数据库系统。
由于现代数据库技术所涵盖的范围很大,难以在本书中详细介绍每种数据库技术,因而,在本章仅选取了有代表意义的某些数据库技术加以分析。
8.2面向对象数据库系统
面向对象数据库系统(ObjectOrientedDataBaseSystem,简称OODBS)是数据库技术与面向对象程序设计方法相结合的产物。
它既是一个DBMS,又是一个面向对象系统,因而既具有DBMS特性,如持久性、辅助管理、数据共享(并发性)、数据可靠性(事务管理和恢复)、查询处理和模式修改等,又具有面向对象的特征,如类型/类、封装性/数据抽象、继承性、复载/滞后联编、计算机完备性、对象标识、复合对象和可扩充等特性。
对于面向对象数据模型和面向对象数据库系统的研究主要体现在:
研究以关系数据库和SQL为基础的扩展关系模型。
例如美国加州大学伯克利分校的POSTGRES就是以INGRES关系数据库系统为基础,扩展了抽象数据类型ATD(AbstractDataType),使之具有面向对象的特性(POSTGRES后来成为Illustra公司的产品,该公司又被Informix公司收购)。
目前,Oracle、Sysbase、Informix等关系数据库厂商,都在不同程度上扩展了关系模型,推出了对象关系数据库产品。
以面向对象的程序设计语言为基础,研究持久的程序设计语言,支持面向对象模型。
例如美国Ontologic公司的Ontos是以面向对象程序设计语言C++为基础的;Servialogic公司的GemStone则是以Smalltalk为基础的。
建立新的面向对象数据库系统,支持面向对象数据模型。
例如法国O2Technology公司的O2,美国ItascaSystem公司的Itasca等。
8.2.1面向对象程序设计方法
面向对象是一种新的程序设计方法学。
第一个面向对象程序设计语言是SIMULA67。
20世纪80年代以来,Smalltalk和C++成为被人们普遍接受的面向对象程序设计语言。
与传统的程序设计方法相比,面向对象的程序设计方法具有深层的系统抽象机制。
由于这些抽象机制更符合事件本来的自然规则,因而它很容易被用户理解和描述,进而平滑地转化为计算机模型。
面向对象的系统抽象机制是对象、消息、类和继承性。
面向对象程序设计方法是一种支持模块化设计和软件重用的实际可行的编程方法。
它把程序设计的主要活动集中在建立对象和对象之间的联系(或通信)上,从而完成所需要的计算。
一个面向对象的程序就是相互联系(或通信)的对象集合。
由于现实世界可以抽象为对象和对象联系的集合,所以面向对象的程序设计方法学是一种更接近现实世界的、更自然的程序设计方法学。
面向对象程序设计的基本思想是封装和可扩展性。
传统的程序设计为数据结构+算法。
而面向对象程序设计就是把数据结构和数据结构上的操作算法封装在一个对象之中,一个对象就是某种数据结构和其运算的结合体。
对象之间的通信通过信息传递来实现。
用户并不直接操纵对象,而是发一个消息给一个对象,由对象本身来决定用哪个方法实现。
这保证了对象的界面独立于对象的内部表达。
对象操作的实现(通常称为“方法”,method)以及对象和结构都是不可见的。
面向对象程序设计的可扩展性体现在继承性和行为扩展两个方面。
一个对象属于一个类,每个类都有特殊的操作方法用来产生新的对象,同一个类的对象具有公共的数据结构和方法。
类具有层次关系,每个类可以有一个子类,子类可以继承超类(父类)的数据结构和操作。
另一方面,对象可以有子对象(实例),子对象还可以增加新的数据结构和新的方法,子对象新增加的部分就是子对象对父对象发展的部分。
面向对象程序设计的行为扩展是指可以方便地增加程序代码来扩展对象的行为,这种扩展不影响该对象上的其他操作。
8.2.2面向对象数据模型
面向对象数据库系统支持面向对象数据模型(简称OO模型)。
即面向对象数据库系统是一个持久的、可共享的对象库的存储和管理者;而一个对象库是由一个OO模型所定义的对象的集合体。
就关系数据库系统而言,E.F.Codd在其开创性的论文中就已给出了关系模型清晰的规范说明。
关系数据库系统乃是建立在统一的数据模型基础上的,对关系数据库系统的研究主要集中在实现技术方面而基本原理方面。
面向对象数据库系统尚不存在这样的规范说明,即对OO模型缺少一个统一的严格的定义。
尽管如此,有关OO模型的许多核心概念已取得了高度的共识。
1.面向对象模型的基本概念
一个OO模型是用面向对象观点来描述现实世界实体(对象)的逻辑组织、对象间限制、联系等的模型。
一系列面向对象的核心概念构成了OO模型的基础。
概括起来,OO模型的核心概念有如下一些。
对象(Object)与对象标识OID(ObjectIDentifier)
现实世界的任一实体都被统一地模型化为一个对象,每个对象有一个惟一的标识,称为对象标识(OID)。
OID与关系数据库中码(Key)的概念和某些关系系统中支持的记录标识(RID)、元组标识(TID)是有本质区别的。
OID是独立于值的、系统全局惟一的。
封装(Encapsulation)
每一个对象是其状态与行为的封装,其中状态是该对象一系列属性(Attribute)值的集合,而行 为是在对象状态上操作的集合,操作也称为方法(Method)。
类(Class)
共享同样属性和方法集的所有对象构成了一个对象类(简称类),一个对象是某一类的一个实例(instance)。
例如,学生是一个类,李枫、张晨、杨敏等是学生类中的对象。
在数据库系统中,要注意区分“型”和“值”的概念。
在OODB中,类是“型”,对象是某一类的一个“值”。
类属性的定义域可以是任何类,即可以是基本类,如整数、字符串、布尔型,也可以是包含属性和方法的一般类。
特别地,一个类的某一属性的定义也可是这个类自身。
类层次(结构)
在一个面向对象数据库模式中,可以定义一个类(如C1)的子类(如C2),类C1称为类C2的超类(或父类)。
子类(如C2)还可以再定义子类(如C3)。
这样,面向对象数据库模式的一组类形成一个有限的层次结构,称为类层次。
一个子类可以有多个超类,有的是直接的,有的是间接的。
例如,C2是C3的直接超类,C1是C3的间接超类。
一个类可以继承类层次中其直接或间接超类的属性和方法。
消息(Message)
由于对象是封装的,对象与外部的通信一般只能通过的消息传递,即消息从外部传送给对象,存取和调用对象中的属性和方法,在内部执行所要求的操作,操作的结果仍以消息的形式返回。
2.对象结构与标识
对象结构:
对象是由一组数据结构和在这组数据结构上的操作程序所封装起来的基本单位,对象之间的联系是通过一组消息来定义的,包括如下内容。
①属性集合:
属性描述对象的状态、组成、和特性,所有属性的集合构成对象数据的数据结构。
对象可以嵌套,组成复杂的对象。
②方法集合:
方法描述对象的行为特性,包括方法的接口(方法调用的说明)和方法的实现(对象操作的算法)。
③消息集合:
对象之间操作请示的集合。
对象标识:
在面向对象数据库中每个对象有惟一的、不变的标识,对象中的属性、方法会随时间变化,但对象的标识始终不变。
对象标识主要有如下几种。
①值标识:
用值表示的标识。
例如关系数据库中元组的码。
②名标识:
用名字表示的标识。
例如变量的名字。
③内标识:
在建立数据模型或程序设计语言中,无须用户给出,而常由系统给出,类似数据库中的DBK。
在面向对象数据库中,大多是内标识。
封装:
每个对象是其状态与行为的封装。
封装是对象外部界面与内部实现之间实行清晰隔离的一种抽象,外部与对象的通信只能通过消息来实现。
面向对象的数据库系统在逻辑上和物理上将面向元组的处理上升为面向对象、面向具有复杂结构的逻辑整体。
现允许使用自然的方法,并结合数据抽象的机制在结构和行为上对复杂的对象建立模型,从而提高管理效率,降低用户使用的复杂性,并且为版本管理、动态模式修改等功能的实现创造了条件。
3.类结构与继承
在面向对象的数据库中,相似对象的集合称为类。
每个对象成为所在类的实例。
一个类中的对象共享一个定义,相互之间的区别仅在于属性的取值不同。
类的概念与关系模式类似,表8.1列出了对照关系。
表8.1类与关系模式的对照
类
类的属性
对象
类的一个实例
关系模式
关系的属性
关系的元组
关系的一个元组
类本身也可以看作一个对象,称为类对象,面向对象数据库模式是类的集合,在一个面向对象数据库模式中,会存在多个相似但又有所不同的类。
因此面向对象数据模式提供了类层次结构,以实现这些要求。
类的层次结构
在面向对象数据模式中,一组类可以形成一个类层次。
一个面向对象数据模式可能有多个类层次。
在一个类层次中,一个类继承其所有超类的属性、方法和消息。
图8.1表示在学校数据库中“学生”类的层次结构。
图8-1“学生”类的层次结构
作为最高一级的类(学生),具有所有学生应具备的属性、方法和消息。
作为超类的下一级子类(研究生,本科生、专科生),除继承其超类的属性、方法和消息外,还各自具备其所在子类的属性、方法和消息,还各自具备其所在子类的属性、方法和消息,依此类推,超类与子类反映“从属(ISA)”关系,子类与子类之间既有共同之处,又相互有所区别。
超类是子类的抽象,子类是超类的具体化。
类层次可以动态扩展,一个新的子类可以从一个或多个已有的类导出。
根据一个类能否继承多个超类的特性将继承分成单继承和多重继承。
继承
在面向对象模式中,继承分为单继承和多重继承。
单继承:
一个子类只能继承一个超类的特性。
多重继承:
一个子类能够继承多个超类的特性。
图8.1的实例就是单继承的层次结构,在图8.2的层次结构中,“在职研究生”既是教职工也是学生,因此“在职研究生”继承了“教职工”和“学生”的全部特性(包括属性、方法和消息),所以是多重继承的层次结构。
图8-2多重继承的层次结构
继承性的特点是:
1继承性是建立数据模式的有力工具,它提供了对现实世界简捷而精确的描述。
2继承性提供了信息重用的机制。
由于子类继承了超类的特性,可以避免许多重复定义。
然而由于子类除继承超类的特性外还需要定义自己的特性,这时可能与从超类继承的特性(包括属性、方法和消息)发生冲突,这种冲突可能发生在子类与超类之间,也可能发生在子类的多个直接超类之间。
这类冲突一般由系统解决,解决方法是制定优先级别规则,一般在子类与超类之间规定子类优先的规则,在子类的多个直接超类之间规定有限次序,按照这种次序定义继承规则。
子类对其直接超类(也称父类)既有继承也有发展,继承的部分就是重用的部分。
对象的嵌套
在面向对象数据库模式中,对象的属性不仅可以是单值或多值的,还可以是一个对象,这就是对象的嵌套关系。
如果对象B是对象A的某个属性,则称A是复合对象,B是A的子对象。
对象的嵌套关系为用户提供了从不同的粒度观察数据库的方法。
所谓粒度,就是数据库中数据细节的详细程度,细节越详细粒度越高。
例如,在计算机的属性中,主机、光驱、硬盘等不是标准数据类型,而是对象,它们又包含若干属性,这些属性中有些还是对象,形成对象的嵌套结构。
但是对于不同的使用者来说,他们所关心的层次是不同的,这就形成了不同的观察粒度。
对象的嵌套结构和类层次结构构成了更加复杂的数据关系,因此面向对象数据库模式是对关系数据模型的推广和发展,因而也更能准确地描述现实世界的信息结构,所以面向对象数据库模式反映了数据库技术在新的应用领域的发展。
8.2.3面向对象数据库语言
面向对象数据库语言(OODB语言)用于描述面向对象数据库模式,说明并操纵类定义与对象实例。
OODB语言主要包括对象定义语言(ODL)和对象操纵语言(OML)对象操纵语言中一个重要子集是对象查询语言(OQL)。
1.面向对象数据库语言的功能
类的定义与操纵
面向对象数据库语言可以操纵类,包括定义、生成、存取、修改与撤销类。
其中类的定义包括定义类的属性、操作特征、继承性与约束等。
操作方法的定义
面向对象数据库语言可用于对象操作方法的定义与实现。
在操作实现中,语言的命令可用于操作对象的局部数据结构。
对象模型中的封装性允许操作方法由不同程序设计语言来实现,并且隐藏不同程序设计语言实现的事实。
对象的操纵
面向对象数据库语言可以用于操纵(即生成、存取、修改与删除)实例对象。
2.面向对象数据库语言的实现
如同关系数据库的标准查询语言SQL一样,面向对象数据库也需要自己的语言。
由于面向对象数据库包括类、对象和方法三种要素,所以面向对象数据库语言可以分为类的定义和操纵语言、对象的定义和操作语言、方法的定义和操作语言三类。
类的定义和操纵语言
类的定义和操纵语言包括定义、生成、存取、修改和撤消类的功能。
类的定义包括定义类的属性、操作特征、继承性与约束性等。
对象的定义和操纵语言
对象的定义和操纵语言用于描述对象和实例的结构,并实现对对象和实例的生成、存取、修改以及删除等操作。
方法的定义和操纵语言
方法的定义和操纵语言用于定义并实现对象(类)的操作方法。
方法的定义和操纵语言可用于描述操作对象的局部数据结构、操作过程和引用条件。
由于对象模型具有封装性,因而对象的操作方法允许由不同的程序设计语言来实现。
8.2.4面向对象数据库的模式演进
数据库模式为适应需求的变化而随时间变化称为模式演进。
在关系数据库中,模式的变化比较简单。
对于面向对象数据库系统,模式的修改就相对复杂得多,主要原因是:
面向对象数据库模式改变频繁,因为面向对象数据库模式更接近实际,一方面客观世界的环境与事物总在不断地变化,另一方面人们对客观世界的理解也在不断地加深和变化,因此常常需要频繁地改变数据库的模式。
面向对象数据库模式修改复杂,由于面向对象数据库模型是数据结构与行为的结合,不仅包含复杂的数据结构,而且还有丰富的语义联系。
因此模式的修改比关系数据库系统复杂得多。
并且这个演进过程本身就是动态的,这更增加了演进过程的复杂性。
1.模式的一致性
模式在演进过程中不能出现自身的矛盾与错误,这是模式的一致性。
模式的一致性通过一致性约束实现,包括惟一性约束、存在性约束和子类约束。
惟一性约束:
命名惟一。
在一个模式中类命名必须惟一,同一类中属性名必须惟一,类名与属性名可以相同,但应尽量避免。
存在性约束:
显式引用的成分必须存在。
被引用的类、属性和操作必须在模式定义中的相应位置中给予定义,操作还必须有其实现程序。
子类约束:
子类与超类之间不能出现环状联系,相互联系必须有必要的说明,并应避免由于多继承带来的冲突。
2.模式演进的操作
类集的操作:
包括对类的增加、删除和改名。
类成分的改变:
包括增加和删除类中的属性和方法,改变类中属性的名称和类型,改变类中操作的名称与功能。
子类与超类联系的改变:
包括增加新的超类和删除原有超类。
3.模式演进的实现
由于面向对象数据库系统中数据关系非常复杂,因此在演进的过程中很可能破坏模式的一致性,所以面向对象数据库模式演进实现问题的研究是当前在此领域的重要问题。
目前主要采取的方法是采用转换机制来实现一致性检测。
所谓转换就是在面向对象数据库中,已有的对象根据新模式的结构进行变换以适应新的模式。
根据转换发生的时间,有两种不同的转换方式。
即转换方式:
一旦模型变化立即执行所有变换,这种方式转换及时,但系统为执行转换,将发生停顿。
延迟转换方式:
模式变化后先不转换,延迟到低层数据库或该对象存取时执行转换。
这种方法可以避免系统停顿,但会影响运行效率。
8.2.5对象-关系数据库
1.面向对象数据库系统的特点
一个面向对象数据库系统必须满足两个条件:
●支持核心的面向对象数据模型;
●支持传统数据库系统所有的数据库特征。
也就是说OODBS必须保持第二代数据库系统的非过程化数据存取方式和数据独立性,即应继承第二代数据库系统已有的技术,不仅能很好地支持对象管理和规则管理,而且能更好地支持原有的数据管理。
对象-关系数据库系统就是按照这样的目标将关系数据库系统与面向对象数据库系统两方面的特征相结合。
对象-关系数据库系统除了具有原来关系数据库的各种特点外,还应该具有以下特点:
扩充数据类型
目前的商品化RDBMS只支持某一固定的类型集,不能依据某一应用所需的特定数据类型来扩展其类型集。
对象-关系数据库系统允许用户在关系数据库系统中数据,即允许用户根据应用需求自己定义数据类型、函数和操作符。
例如,某些应用涉及三维向量,系统就允许用户定义一个新的数据类型三维向量vector,它包含3个实数分量。
而且一经定义,这些新的数据类型、函数和操作符将存放在数据库管理系统核心中,可供所有用户共享,如同基本数据类型一样。
例如可以定义数组、向量、矩阵、集合等数据类型以及这些数据类型上的操作。
支持复杂对象
能够在SQL中支持复杂对象。
复杂对象是指由多种基本数据类型或用户自定义的数据类型构成的对象。
支持继承的概念
能够支持子类、超类的概念,支持继承的概念,包括属性数据的继承和函数及过程的继承;支持单继承与多重继承;支持函数重载(操作的重载)。
提供通用的规则系统
能够提供强大而通用的规则系统。
规则在DBMS及其应用中是十分重要的,在传统的RDBMS中用触发器来保证数据库数据的完整性。
触发器可以看成规则的一种形式。
对象-关系数据库系统要支持的规则系统将更加通用,更加灵活,并且与其他的对象-关系能力是集成为一体的。
例如规则中的事件和动作可以是任意的SQL语句,可以使用用户自定义的函数,规则能够被继承等。
这就大大增强了对象-关系数据库的功能,使之具有主动数据库和知识库的特性。
2.实现对象-关系数据库的方法
当前主要的开发方法包括:
在现有关系数据库的DBMS基础上扩展,一般有两种途径。
将现有关系数据库的DBMS与某种对象-关系数据库产品相连接,使现有关系数据库的DBMS。
将现有与某种对象-关系数据库产品相连接,使现有面向对象型的DBMS具备对象-关系数据库的功能。
扩充现有面向对象型的DBMS使之成为对象-关系数据库。
8.3分布式数据库系统
分布式数据库是由一组数据组成的,这组数据分布在计算机网络的不同计算机上,网络中的每个结点具有独立处理的能力(称为场地自治),可以执行局部应用。
同时,每个结点也能通过网络通信子系统执行全局应用。
这个定义强调了场地自治性以及自治场地之间的协作性。
即每个场地是独立的数据库系统,它有自己的数据库、自己的用户、自己的CPU,运行自己的DBMS,执行局部应用,具有高度的自治性。
同时各个场地的数据库系统又相互协作组成一个整体。
这种整体性的含义是,对于用户来说,一个分布式数据库系统逻辑上看如同一个集中式数据库系统一样,用户可以在任何一个场地执行全局应用。
8.3.1分布式数据库系统的特点与目标
分布式数据库系统是在集中式数据库系统技术的基础上发展起来的,但不是简单地把集中式数据库分散地实现,它是具有自己的性质和特征的系统。
集中式数据库的许多概念和技术,如数据独立性、数据共享和减少冗余度、并发控制、完整性、安全性和恢复等,在分布式数据库系统中都有不同的但更加丰富的内容。
1.数据独立性
数据独立性是数据库方法追求的主要目标之一。
在集中式数据库系统中,数据独立性包括数据的逻辑独立性与数据的物理独立性。
其含义是用户程序与数据的全局逻辑结构及数据的存储结构无关。
在分布式数据库系统中,数据独立性这一特性更加重要,并具有更多的内容。
除了数据的逻辑独立性与物理独立性外,还有数据分布独立性亦称分布透明性。
分布透明性指用户不必关心数据的逻辑分片,不必关系数据物理位置分布的细节,也不必关心重复副本(冗余数据)一致性问题,同时也不必关心局部场地上数据库支持哪种数据模型。
分布透明性也可以归入物理独立性的范围。
有了分布透明性,用户的应用程序书写起来就如同数据没有分布一样。
当数据从一个场 地移到另一场 地时不必改写应用程序,当增加某些数据的重复副本时也不必改写应用程序。
数据分布的信息由系统存储在数据字典中。
用户对非本地数据的访