DB2 9 Viper快速入門
DB2數(shù)據(jù)庫在開發(fā)過程中開發(fā)出了很多新的版本,功能性較之前有了很大的提高,其中DB2 9 Viper就是其中之一,下文中詳細(xì)為大家介紹DB2 9 Viper。
為了幫助您快速掌握 DB2 自身的 XML 特性,請完成幾個(gè)普通的任務(wù),比如:
創(chuàng)建用于管理 XML 數(shù)據(jù)的數(shù)據(jù)庫對象,包括一個(gè)測試數(shù)據(jù)庫、一些示例表和視圖。
使用 INSERT 和 IMPORT 語句將 XML 數(shù)據(jù)填充到數(shù)據(jù)庫中。
驗(yàn)證您的 XML 數(shù)據(jù)。使用 DB2 開發(fā)和注冊您的 XML 模式,并在導(dǎo)入數(shù)據(jù)時(shí)使用 XMLVALIDATE 選項(xiàng)。
后續(xù)文章將包括其他主題,比如使用 SQL 查詢、更新和刪除 DB2 XML 數(shù)據(jù),使用 XQuery 查詢 DB2 XML 數(shù)據(jù),開發(fā)存取 DB2 XML 數(shù)據(jù)的 Java 應(yīng)用程序和 Web 組件。
創(chuàng)建數(shù)據(jù)庫對象
讓我們先來創(chuàng)建一個(gè)單獨(dú)的 DB2 Unicode 數(shù)據(jù)庫。在 DB2 Viper 中,只有 Unicode 數(shù)據(jù)庫才能同時(shí)存儲(chǔ) XML 文檔和 SQL 數(shù)據(jù)的更多傳統(tǒng)格式,比如整數(shù)、日期/時(shí)間、變長字符串,等等。隨后,您將在這個(gè)數(shù)據(jù)庫中創(chuàng)建對象來管理 XML 和其他類型的數(shù)據(jù)。
創(chuàng)建測試數(shù)據(jù)庫
為了創(chuàng)建一個(gè)新的 DB2 Unicode “測試” 數(shù)據(jù)庫,打開 DB2 命令窗口,發(fā)出語句來指定 Unicode 編碼集合和支持的區(qū)域,如 清單 1:
清單 1. 創(chuàng)建用于存儲(chǔ) XML 數(shù)據(jù)的數(shù)據(jù)庫
create database test using codeset UTF-8 territory us
旦創(chuàng)建了 Unicode 數(shù)據(jù)庫,您就不需要發(fā)出任何專門的命令或采取任何進(jìn)一步措施來使 DB2 能夠以它自身分層的格式存儲(chǔ) XML 數(shù)據(jù),因?yàn)槟?DB2 系統(tǒng)已經(jīng)準(zhǔn)備好了。
創(chuàng)建示例表
為了存儲(chǔ) XML 數(shù)據(jù),請創(chuàng)建包含一個(gè)或多個(gè) XML 列的表。這些表充當(dāng)文檔集合的邏輯容器;在幕后,DB2 實(shí)際上使用了不同的存儲(chǔ)方案來存儲(chǔ) XML 和非 XML 數(shù)據(jù)。然而,使用表作為管理各種受支持的數(shù)據(jù)格式的邏輯對象,簡化了管理和應(yīng)用程序開發(fā)問題,特別是當(dāng)需要在一個(gè)單獨(dú)的查詢中集成不同的數(shù)據(jù)格式時(shí)。
您可以對 DB2 表進(jìn)行定義,使其只包含 XML 列、只包含傳統(tǒng) SQL 類型的列或者同時(shí)包含兩者。本文對后一種情況進(jìn)行了建模。清單 2 中的例子連接到 “測試” 數(shù)據(jù)庫,并創(chuàng)建了兩個(gè)表。***個(gè)是 “items” 表,追蹤關(guān)于貨物的銷售情況和顧客對貨物的評價(jià)信息。第二個(gè)表追蹤的是關(guān)于 “客戶” 的信息,包括關(guān)于聯(lián)系信息的數(shù)據(jù)。注意 “comments” 和 “contactinfo” 是基于新的 DB2 XML 數(shù)據(jù)類型,而所有其他的列都是基于傳統(tǒng) SQL 數(shù)據(jù)類型的。
清單 2. 創(chuàng)建用于 XML 數(shù)據(jù)的表
connect to test;
create table items (
id int primary key not null,
brandname varchar(30),
itemname varchar(30),
sku int,
srp decimal(7,2),
comments xml
);
create table clients(
id int primary key not null,
name varchar(50),
status varchar(10),
contactinfo xml
);
如果您仔細(xì)地查看這些表定義例子,您將注意到 “comments” 和 “contactinfo” 列都沒有進(jìn)行 XML 文檔內(nèi)部結(jié)構(gòu)的定義。這是 DB2 的一個(gè)重要特性。用戶不需要為了存儲(chǔ)數(shù)據(jù)而預(yù)定義一個(gè) XML 數(shù)據(jù)結(jié)構(gòu)(或者,更準(zhǔn)確地說是一個(gè) XML 模式)。事實(shí)上,DB2 可以在一個(gè)單獨(dú)的列中存儲(chǔ)任何格式良好的 XML 文檔,這意味著不同模式的 XML 文檔 —— 或沒有和任何注冊的模式關(guān)聯(lián)的文檔 —— 都可以存儲(chǔ)在相同的 DB2 列中。當(dāng)我們討論如何在 DB2 中存儲(chǔ)數(shù)據(jù)時(shí),本文將深入討論這個(gè)特性。
創(chuàng)建視圖
您可以隨意地在包含 XML 數(shù)據(jù)的表上創(chuàng)建視圖,就像您可以在只包含傳統(tǒng) SQL 數(shù)據(jù)類型的表上創(chuàng)建視圖一樣。清單 3 中的例子創(chuàng)建具有 “Gold” 狀態(tài)的客戶的一個(gè)視圖:
清單 3. 創(chuàng)建一個(gè)包含 XML 數(shù)據(jù)的視圖
create view goldview as
select id, name, contactinfo
from clients where status='Gold';
關(guān)于索引的一點(diǎn)說明
***,沒有必要在 XML 列上創(chuàng)建專門的索引來提高數(shù)據(jù)的查詢速度。因?yàn)檫@是一篇介紹性文章,而且示例數(shù)據(jù)很少,所以本文不會(huì)涵蓋到那個(gè)主題。然而,在生產(chǎn)環(huán)境中,定義一個(gè)適當(dāng)?shù)乃饕龑?shí)現(xiàn)***的性能來說很關(guān)鍵。查看本文結(jié)尾部分的 “參考資料”,以助于了解 DB2 的新索引技術(shù)。