1基于XML的数据库应用1关系型数据库1.1关系模型关系模型是在1970年由IBM的研究员E.F.Codd博士首先提出,在之后的几十年中,关系模型的概念得到了充分的发展并逐渐成为数据库架构的主流模型。简单来说,关系模型指的就是二维表格模型。下面列出了关系模型中的常用概念。关系:可以理解为一张二维表,每个关系都具有一个关系名,就是通常说的表名。元组:可以理解为二维表中的一行,在数据库中经常被称为记录。属性:可以理解为二维表中的一列,在数据库中经常被称为字段。域:属性的取值范围,也就是数据库中某一列的取值限制。关键字:一组可以唯一标识元组的属性。数据库中常称为主键,由一个或多个列组成。关系模式:指对关系的描述,其格式为:关系名(属性1,属性2,…,属性N)。在数据库中通常称为表结构。1.2关系型数据库关系型数据库是支持采用了关系模型的数据库,简单来说,关系模型就是指二维表模型。关系型数据库以行和列的形式存储数据,以便于用户理解。这一系列的行和列被称为表,一组表组成了数据库。用户用查询(Query)来检索数据库中的数据。一个Query是一个用于指定数据库中行和列的SELECT语句。关系型数据库通常包含下列组件:客户端应用程序(Client)数据库服务器(Server)数据库(Database)StructuredQueryLanguage(SQL,结构化查询语言)是Client端和Server端的桥梁,Client用SQL来向Server端发送请求,Server返回Client端要求的结果。现在流行的大型关系型数据库有IBMDB2、Oracle、SQLServer、SyBase、Informix等。关系型数据库管理系统中储存与管理数据的基本形式是二维表。21.3关系型数据库的优点关系型数据库相比其他模型的数据库而言,有着以下优点:容易理解:二维表结构是非常贴近逻辑世界的一个概念,关系模型相对网状、层次等其他模型来说更容易理解。使用方便:通用的SQL语言使得操作关系型数据库非常方便,程序员甚至于数据管理员可以方便地在逻辑层面操作数据库,而完全不必理解其底层实现。易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大降低了数据冗余和数据不一致的概率。近几年来,非关系型数据库在理论上得到了飞快的发展,例如:网状模型、对象模型、半结构化模型等。网状模型拥有性能较高的优点,通常应用在对性能要求较高的系统中;对象模型符合面向对象应用程序的思想,可以完美地和程序衔接,而不需要另外的中间转换组件,例如现在很多的O\RMapping组件;半结构化模型随着XML的发展而得到发展,现在已经有了很多半结构化的数据库模型。但是,凭借其理论的成熟、使用的便捷以及现有应用的广泛,关系型数据库仍然是系统应用中的主流方案。2XML数据库2.1XML文档类型XML文档有两种类型:面向文档处理和面向数据处理。面向文档处理的文档是利用XML来获取自然(人类)语言的那些文档,如用户手册。它们以复杂或无规则的结构和混合内容为特征,而且文档的物理结构非常重要。这些文档的处理侧重于给用户提供信息的最终表示,因此它们也被称作面向表示的文档。面向数据处理的文档主要利用XML来传送数据,这些文档包括销售订单、病人记录和科学数据等。面向数据处理的XML文档的物理结构,如元素的顺序,或者数据被存储为属性还是子元素,通常不是很重要。它们的特征是高度有序的结构,并且同时带有那些数据结构的多个副本,类似于关系数据库系统中的多条记录。这些文档的处理通常侧重于应用程序间的数据交换,因此它们也被称作面向消息的文档。这两类文档有时也简称为面向文档的(XML)文档和面向数据的(XML)文档。3面向数据处理和面向文档处理的XML文档之间的区别不大,然而文档上需要执行的操作是不一样的。在一个面向文档处理的XML文档中,需要执行的操作包括检索整个文档、搜索关键词、修改一部分或重排一部分。在一个面向数据处理的XML文档中,需要执行的操作包括检索文档的一个指定部分、搜索元素和数据的一个特定的结合、修改或删除一个简单的元素或一块简单的数据,或者给文档添加一个新元素。2.2XML数据库XML数据库是一个XML文档的集合,这些文档是持久的并且是可操作的。目前XML数据库有三种类型:(1)XMLEnabledDatabase(XEDB),即能处理XML的数据库。其特点是在原有的数据库系统上扩充对XML数据的处理功能,使之能适应XML数据存储和查询的需要。一般的做法是在数据库系统之上增加XML映射层,这可以由数据库供应商提供,也可以由第三方厂商提供。映射层管理XML数据的存储和检索,但原始的XML元数据和结构可能会丢失,而且数据检索的结果不能保证是原始的XML形式。其核心方法是将XML的树型结构拆分为表。XEDB的基本存储单位与具体的实现紧密相关。(2)NativeXMLDatabase(NXD),即纯XML数据库。其特点是以自然的方式处理XML数据,以XML文档作为基本的逻辑存储单位,针对XML的数据存储和查询特点专门设计适用的数据模型和处理方法。(3)HybridXMLDatabase(HXD),即混合XML数据库。根据应用的需求,可以视其为XEDB或NXD的数据库,典型的例子是Ozone()。3XED和NXD的比较早期的XML数据以文档(文本文件)的方式存储,以关键字查询等信息检索手段进行查询,简单易用,适合XML文档不频繁更新的场合。由于缺乏系统的存储和查询机制的支持,造成查询能力低,不能满足复杂条件的查询,更谈不上查询优化。一些现有的商业数据库管理系统扩充了处理XML数据的功能。利用现有数据库成熟的技术,把XML查询要求转换为数据库的查询表达,如SQL,由数据库的查询引擎优化查询表达,产生查询执行计划4并执行,最后再将查询的结果转换为XML数据。这种方法在一定程度上解决了查询复杂性的要求,但是多次转换带来的问题是效率的降低和查询语义的混淆,即阻抗失配的问题。(1)从本质上讲,传统的RDBMS不支持层次的和半结构化的数据形式,只有经过转换处理才能把嵌套的XML数据放到简单的关系表中。XML是具有动态结构的数据,这正是XML可扩展性的关键,而传统的RDBMS不能处理这种数据。(2)SQL适合于查询受确定模式支配的表,它不是为具有动态、复杂特性的XML设计的。(3)传统的RDBMS查询引擎需要把针对XML的查询翻译成很多关系表的检索和连接运算,这不仅造成查询性能的下降,而且往往不能产生代价较小的查询执行计划。3.1XED的优、劣势优势:用户不需要将传统数据库中原有数据重新移植到新系统中,只是稍加改变,就可以支持XML应用。传统数据库技术,例如并发控制、事务等,已经很成熟传统数据库知识和经验依然有效,用户不需要为了应用XML而再去学习一套新的数据库技术劣势:XML文档存入到数据库时需要将其打碎,取出时需要组合,不仅耗时,而且文档的格式可能会不同XML文档和数据库之间的模式转换复杂,在前期开发阶段需要投入很大对以文档为中心、格式复杂的XML文档处理性能较差在采纳XML技术标准方面较落后3.2NXD的优、劣势优势:XML文档存取无需模式转换,存取速度快对格式复杂的XML文档支持比XED要好支持大部分的最新的XML技术标准劣势:在传统数据库技术方面比较薄弱,没有经过时间的考验5知识比较新,相应的支持人员和文档资源都比较少应用范围仅局限在XML应用领域中事实上,两者的优劣并没有统一的答案,而是和具体的应用相关。在开发格式较简单、数据内容比格式更重要的应用时,XED是不错的选择,特别是在已有的传统数据库上要提供XML的访问接口的情况下。相反,如果XML文档格式复杂,数据本身就有层次性关系,或是只有XML数据的时候,就可以考虑NXD,因为它提供更好的性能,对XML标准有更完备的支持。另外,由于NXD在事务、数据恢复等传统数据库技术方面还未得到时间的检验,因此对数据安全要求较高的一些应用,如银行、金融系统的数据库,建立在传统数据库上的XED相对来说更有优势。4NativeXML数据库NativeXML数据库管理系统(纯XML数据库管理系统,NXDBMS)以自然的方式处理XML数据,没有因数据模型转换而带来信息丢失和性能下降。NXDBMS与非NXDBMS的区别在于”:①有效地支持XML数据的自描述性、半结构化和有序性;②系统直接存储XML数据,而不是把XML数据转换成关系模型或者面向对象模型,由关系数据库或面向对象数据库存储;③直接支持XML查询语言,如XQuery,XPath,而不是转换成SQL或OQL(对象查询语言)。什么是真正的NativeXML数据库(纯XML数据库,NXD)?RonaldBourret在“XMLandDatabases”一文中给出有关NXD的定义。一个纯XML数据库是指:(1)相对于XML文档中的数据,定义了XML文档的逻辑模型,并且按照该模型来存储和检索文档。这样的模型至少应该包括元素、属性、PCDATA以及文档顺序。如Xpath数据模型、XMLInfoset(参阅/TR/xml-infoset/)以及由DOM和SAX1.0(参阅http://sax.sourceforge.net和ht-tp//.saxproject.org)中的事件所隐含的模型都是这类数据模型。(2)就像关系数据库以行作为表的逻辑存储基本单位一样,NXDBMS以XML文档作为NXD的逻辑存储基本单位。(3)不要求有任何特殊的基本物理存储模型,它可以建立在关系的、层次的或面向对象数据库之上,或者使用诸如索引文件、压缩文件此类的专门存储格式。6从这个定义至少可以简单地总结以下三点:①纯XML数据库是专门用来存储XML数据的,而且完整无缺地存储XML模型的所有成分;②文档进得去出得来;③NXD可能根本就不是真正独立的数据库。随着对NXD的认识与技术的发展,人们越来越不认同上述定义的第三点。在这一方面,德国的SoftwareAG(参阅ht-tp://,softwareag.corn/)公司走在了前面。他们认为建立和设计NXD系统是用来处理XML数据的,而不仅仅是在任意数据模型的数据库系统之上附加一层对XML的处理。用户可能一眼看不出它们之间有什么差别,但最根本的不同是在系统的内部。在很多方面,XML都不同于其他著名的数据模型(如关系模型、面向对象模型)。将XML映射到另一种数据模型常常引起“阻抗失配”,并导致功能和性能上的局限”。因此,NXD必须直接存储XML数据。一般认为,NXD应该具有以下几个特性:文档集合(DocumentCollection),查询、更新,事务、锁和并发控制、二次开发接口等。文档集合很多NXD产品都支持“文档集合”的概念,就像文件系统中的一个目录或RDBMS中的一张表,一个“文档集合”把一类文档聚集在一起,方便用户操作。集合级别上的查询、修改操作都会反映到集合内的每个文档。一般说来,一个“文档集合”关联一种模式。将文档加入到有模式的文档集合时,会对要加入的文档进行模式检查。只有符合文档集合模式的文档才可以加入。不同于RDBMS中表必须具有模式,NXD还提供无模式的文档集合,即将一个文档放入该集合中时,不必检查该文档的模式。无模式的文档集合大大方便了用户存储格式很难统一,半结构化的XML文档。查询语言XPath和XQuery是W3C推荐的针对XML文档的查询语言。目前大部分NXD产品都支持XPath,。另外还有一些NXD提供专有的查询语言。Path是基于XML文档树形模型,给出从某个结点起的查询路径,搜索文档。目前,XPath作为数据库查询语言还有不少缺陷:不能分组、排序、连接等。而XQuery更像一种编程语言,支持循环等逻辑,支持分组、排序、连接等。相对于传统数据库的标准SQL语句,XQuery在对XML数据