WEB开发网
开发学院数据库DB2 DB2 XML 编程,第 2 部分: 在应用程序体系结构中使... 阅读

DB2 XML 编程,第 2 部分: 在应用程序体系结构中使用 XML 数据库支持

 2009-11-11 00:00:00 来源:WEB开发网   
核心提示: 即使遗留数据是关系型的,但是通过使用 Viper 2 中引入的一些 SQL/XML 函数,DB2 XML 编程,第 2 部分: 在应用程序体系结构中使用 XML 数据库支持(10),可以轻松地查询这些数据并将它们转换为 XML,看一下第 1 部分中的示例 “第二种情况 —

即使遗留数据是关系型的,但是通过使用 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 列
DB2 XML 编程,第 2 部分: 在应用程序体系结构中使用 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)环境中活跃的参与者。

“旧的秩序已经改变了,新的秩序正在形成。”(The old order changeth, yielding place to new.) Morte d'Arthur

上一页  5 6 7 8 9 10 

Tags:DB XML 编程

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接