首页产品库评测行情新闻|手机数码笔记本台式机DIY硬件数字家庭数码相机办公外设|软件下载游戏开发|社区

更多

数码相机
MP4
LCD
机箱
音箱

软件资讯设计 工具 系统 开发 安全 办公 陶吧 IT教育 Vista频道 | 下载中心酷我音乐盒 腾讯QQ
天极网 > 开发频道>DB2 XML 编程之使用XML数据库支持

DB2 XML 编程之使用XML数据库支持

2008-01-14 10:48作者:Hardeep Singh 出处:论坛整理责任编辑:方舟

  优点和缺点

  所有新技术在刚刚出现时都会有一些问题。一些问题是由于实现还不成熟造成的,其他问题是由于开发人员还不适应变化。

  1. 尽管性能有所改进,但是仍然比不上关系数据。
  2. XQuery 是一种新语言,而且一些 SQL/XML 函数的语法需要花时间适应。
  3. 有许多遗留数据采用关系格式。
  4. 最重要的是,这是一种创建业务应用程序和数据模式的新方式,它与当前的面向对象应用程序和规范化关系模式很不一样。
  5. 能够对这类查询进行调试和优化的工具还不多。

  尽管存在这些缺点,但是新的模型管理数据的方式更加自然。在应用程序层和数据库层中都按原样维护和操作业务数据信息,而且您将第 3 部分中看到,甚至在客户机层中也是如此。

  尽管外围语言可能不一样(Java、XQuery、JavaScript、PHP),但是在所有层中用来在 XML 文档中移动的语言都是相同的(XPath)。

  即使遗留数据是关系型的,但是通过使用 Viper 2 中引入的一些 SQL/XML 函数,可以轻松地查询这些数据并将它们转换为 XML。看一下第 1 部分中的示例 “第二种情况 —— 所有数据在数据库中存储为关系形式”。可以使用 Viper 2 中引入的 XMLROW 函数简化这个查询。

Select XMLROW (customerid, firstname, lastname OPTION as attributes ROW Customer)
from customer_table where customerid=?
 

  还可以在关系数据和 XML 数据之间创建联结。在这个示例场景中,如果有第三个表,其中包含购买商品的产品说明,而且这是一个关系表,那么可以使用商品 ID 执行联结,从而获得购买的每种商品的产品说明。

  图 5. 联结关系列和 XML 列

  联结关系列和 XML 列

Select details, weight from SQLPRODUCT, ITEM_TABLE
where xmlexists ('$itemxml/item[@itemid=$pid]'
passing ITEM_TABLE.ITEMXML AS "itemxml", SQLPRODUCT.PID AS "pid" )
 

  在 DB2 9 中,可以使用 passing 子句向 SQL 语句中嵌入的 XQuery 传递运行时参数,但是不能向 XQuery 中嵌入的 SQL 传递参数。在 Viper 2 中,这个限制已经消除了,现在可以向 XQuery 中嵌入的关系查询传递运行时变量。

  清单 7. 向 XQuery 中嵌入的 SQL 传递运行时变量

values(xmlquery('

for $Customer0 in db2-fn:xmlcolumn("PURCHASE_TABLE.ITEMXML")/Customer
where $Customer0/@customerid= $custid
return (
$Customer0/Item,
db2-fn:sqlquery(
''select xmlrow(details, description, weight option ROW "description")
from sqlproduct where pid= parameter(1)'', $Customer0/Item/@ID))

' passing cast( ? AS varchar(255) ) as "custid" ))
 

  因此,即使一部分数据位于关系表中,一些数据是 XML,现在都可以在 SQL 查询、XQuery 或这两者中在 XML 数据和关系数据之间进行动态联结。

  在某些情况下,性能可能不是大问题,因为:

  •   能够为数据库中存储的 XML 文档创建基于 XPath 表达式的索引。

create index custfname on customer_table(info) generate key
using xmlpattern '/Customer/@firstname' as sql varchar(64)
 

  •   因为数据库模式更简单,所以减少了所需的联结数量。
  •   因为现在可以在查询中缩减数据,然后再把数据发送给应用程序,所以可以减少 I/O。
  •   随时可以使用 SQL/XML 函数(比如 XMLTable)将 XML 文档中的关键信息提取到关系列中,并为它们创建关系索引。
  •   可以为 XML 文档创建文本搜索索引。

  结束语

  XML 已经取得了稳固的地位。大多数行业和政府组织都对他们的 XML 模式做了标准化,并要求电子文档必须符合这些模式。既然通过线路交换的 B2B 数据已经采用了 XML 格式,为什么不在数据库中按原样(pureXML)存储这些数据呢?将数据存储为 XML 之后,可以使用 XQuery 和标准的 SQL/XML 对它进行编制索引、查询、检验、操作、转换和更新。随着越来越多的应用程序逻辑被放在查询中,数据库可以以 Web 服务和 feed 的形式公开它的存储过程,从而成为面向服务体系结构(SOA)环境中活跃的参与者。

共4页。 上一页1234
进入 最权威的Windows 7论坛 查看网友讨论

软件频道最新更新

热点推荐

IT嘉年华

编辑推荐

软件下载

热门
推荐

网友关注

软件
资料
游戏

装机推荐

文章排行

本周
本月
最新更新
天极服务|关于我们|About us|网站律师|RSS订阅|友情合作|加入我们|天极动态|网站地图|意见反馈|MSN/QQ上看天极
Copyright (C) 1999-2012 Yesky.com, All Rights Reserved 版权所有 天极网络