国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
技巧:XML 和數(shù)據(jù)庫之間的映射

技巧:XML 和數(shù)據(jù)庫之間的映射

掌握將數(shù)據(jù)映射到 XML 模式的簡單方法

級別: 中級

Hany Saleeb, 技術顧問, Freelance

2005 年 12 月 08 日

XML 用戶一個常見的問題是如何將 XML 映射到數(shù)據(jù)庫。本文討論基于表的映射和對象-關系映射。這兩種映射常常作為在 XML 文檔和數(shù)據(jù)庫特別是關系數(shù)據(jù)庫之間轉換數(shù)據(jù)的軟件的基礎。在這個領域,一個重要的特點是映射是雙向的,就是說可以把數(shù)據(jù)從 XML 文檔轉化到數(shù)據(jù)庫,也可以從數(shù)據(jù)庫轉化到 XML 文檔。

即使數(shù)據(jù)庫沒有自稱支持 XML 特性,也可以在關系數(shù)據(jù)庫中存儲和檢索 XML 文檔。這樣做需要小心地使用 Java™ 編程語言(數(shù)據(jù)庫不一定兼容 Java Database Connectivity 或 JDBC),還需要一個框架來連接關系數(shù)據(jù)庫和 XML 文檔流。

將 XML 映射到數(shù)據(jù)庫有兩種常見的方法:基于表的映射和對象-關系(或基于對象的)映射。這兩種方法都是雙向的,因此可用于存儲和檢索 XML 文檔。

基于表的映射

基于表的映射 將文檔看作一個表或者一組表。清單 12 顯示了這兩種情況下的文檔結構。


清單 1. 表映射的選項(單表)
                                                <Table ABC>                        <Row1>                        <Column_a>123-45-7890</Column_a>                        <Column_b>Johnson, Eric</Column_b>                        <Column_c> Pharmaceutical </Column_c>                        </Row1>                        <Row2>                        <Column_a>999-00-1010</Column_a>                        <Column_b>Mitchell, Bruce</Column_b>                        <Column_c> Industrial </Column_c>                        </Row2>                        </Table ABC>                        


清單 2. 表映射的選項(多表)
                                                <Tables>                        <Table_1>                        <Row1>                        <Column_a>123-45-7890</Column_a>                        <Column_b> Johnson, Eric </Column_b>                        <Column_c>Company A</Column_c>                        </Row1>                        <Row2>                        <Column_a>999-00-1010</Column_a>                        <Column_b> Mitchell, Bruce </Column_b>                        <Column_c> Company  B</Column_c>                        </Row2>                        </Table_1>                        <Table_2>                        <Row1>                        <Column_a>Company A</Column_a>                        <Column_b>Pharmaceutical</Column_b>                        </Row1>                        <Row2>                        <Column_a>Company B</Column_a>                        <Column_b>Industrial</Column_b>                        </Row2>                        </Table_2>                        </Tables>                        

這種映射最明顯的優(yōu)點是簡單。因為結構與關系數(shù)據(jù)庫的表及結果集匹配,根據(jù)這種映射編寫代碼很容易。代碼執(zhí)行快、伸縮性好,對某些應用很合適,比如每次一個表在數(shù)據(jù)庫之間傳遞數(shù)據(jù)。

但是,基于表的映射也有一些不足之處。它只能用于非常小的 XML 文檔子集。此外,它沒有保留物理結構(即字符和實體引用、字符編碼或獨立的聲明)、文檔信息(即文檔類型聲明或 DTD)、注釋和處理指令。





回頁首


對象-關系映射

基于表的映射只能用于有限的 XML 文檔,因此多數(shù)支持 XML 的關系數(shù)據(jù)庫、大部分支持 XML 的對象服務器以及一些中間件工具使用更加復雜的映射,稱為對象-關系映射。這種映射方法將 XML 文檔建模為針對文檔數(shù)據(jù)的一棵對象樹,然后將這些對象映射到數(shù)據(jù)庫。

比如 清單 3 所示的 XML 文檔。


清單 3. XML 格式的單個銷售訂單
                                                <SalesOrder>                        <Number>1234</Number>                        <Customer>Gallagher Industries</Customer>                        <Date>29.10.00</Date>                        <Item Number="1">                        <Part>A-10</Part>                        <Quantity>12</Quantity>                        <Price>10.95</Price>                        </Item>                        <Item Number="2">                        <Part>B-43</Part>                        <Quantity>600</Quantity>                        <Price>3.99</Price>                        </Item>                        </SalesOrder>                        

該文檔映射為 清單 4 所示的對象。


清單 4. 層次化 XML 表示的單個銷售訂單
                                                object SalesOrder {                        number = 1234;                        customer = "Gallagher Industries";                        date = 29.10.00;                        items = {ptrs to Item objects};                        }         /                                     /                                       /                                         object Item {       object Item {                        number = 1;         number = 2;                        part = "A-10";      part = "B-43";                        quantity = 12;      quantity = 600;                        price = 10.95;      price = 3.99;                        }                   }                        

該方法是層次化的,對數(shù)據(jù)映射來說很直觀。數(shù)據(jù)庫對象帶來了一些優(yōu)點,其中包括:

  • 數(shù)據(jù)庫獨立性:數(shù)據(jù)庫對象從根本上是獨立于數(shù)據(jù)庫創(chuàng)建的,不依賴于特定底層數(shù)據(jù)特性來提供其功能。這種獨立性使您可以使用數(shù)據(jù)庫對象迅速將應用程序構建從一種數(shù)據(jù)庫平臺轉移到另一種數(shù)據(jù)庫平臺,提供了很大的可伸縮性。
  • 自動化的連接處理:自動化連接處理能夠連接、斷開和管理系統(tǒng)資源。對客戶機對象的抽象可以提供更好的控制和性能。
  • 聲明性的引用完整性:通過直接在數(shù)據(jù)庫對象中嵌入訪問邏輯,可以獲得和使用存儲過程訪問數(shù)據(jù)庫同樣的好處,而且不依賴于特定平臺。引用完整性成了數(shù)據(jù)庫獨立性,數(shù)據(jù)庫對象之間的復雜關系成了可移植性。比如,可以在數(shù)據(jù)庫對象中集成業(yè)務規(guī)則,讓訪問該對象的所有應用程序都保證遵守這些規(guī)則。
  • 多層驗證:可以在對象或者其父對象上執(zhí)行檢查。這樣就可以規(guī)范和驗證訪問、權限以及數(shù)據(jù)完整性。
  • 避免內嵌 SQL:使用數(shù)據(jù)庫對象可以使應用程序避免內嵌 SQL 及其維護的困難和系統(tǒng)依賴性。如果應用程序只與其他 Java 對象交互,系統(tǒng)的設計就可以是完全面向對象的。
  • 安全:可以確保與數(shù)據(jù)庫對象的任何交互的安全,并容易地保證數(shù)據(jù)安全。




回頁首


映射方法論

實現(xiàn)對象-關系映射需要兩步。首先將 XML 模式(這里使用 DTD)映射到對象模式,然后將對象模式映射到數(shù)據(jù)庫模式。也可以將這兩種映射合并成一個 DTD 到數(shù)據(jù)庫的映射,現(xiàn)在多數(shù)軟件都是這樣做的。

表 1 中的例子顯示的簡單元素類型 BDE 被映射到字符串,而復雜元素類型 AC 被映射到類。在對象-關系映射的第一部分,AC 的模型和屬性被映射到類 AC 的屬性。AC 的內容模型中對 BDE 的引用被映射為字符串。

表 1. 對象關系映射,第 1 部分
DTD
<!ELEMENT A (B, C)> <!ELEMENT B (#PCDATA)> <!ELEMENT C (D, E)> class A { String b; C c; }
<!ELEMENT D (#PCDATA)> <!ELEMENT E (#PCDATA)> class C {String d; String e; }

對象-關系映射的第二部分(參見表 2)中,類映射到表,標量屬性映射到列,指針/引用屬性映射到主鍵/外鍵關系。A 的內容模型中對 C 的引用被映射到 pointer/reference 類型的屬性,指向類 C 的對象,因為元素類型 C 被映射到類 C。

表 2. 對象關系映射,第 2 部分
class A {String b; C c; } Table A: Column b Column c_fk
class C {String d; String e; } Table C: Column d Column e Column c_pk




回頁首


結束語

兩種映射都是對 XML 文檔中的數(shù)據(jù) 而不是對文檔本身建模。因此映射更適合于以數(shù)據(jù)為中心的文檔而不是以文檔為中心的文檔。雖然對象-關系映射是采用面向對象的技術,但是也不夠理想?;诒淼挠成涓静荒芴幚砘旌蟽热?,而從性能的角度看對象-關系映射可能效率很低。使用哪種方法都行,但是必須記住這些警告。





回頁首


參考資料

學習

討論




回頁首


關于作者

Hany Saleeb 曾經(jīng)在多家技術、金融和衛(wèi)生保健企業(yè)中工作過。 他的專長是和 J2EE、XML 以及數(shù)據(jù)庫有關的應用軟件和 n 層系統(tǒng)設計。他擁有計算機科學博士學位,主攻數(shù)據(jù)挖掘和信息檢索。




本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
查看MySQL數(shù)據(jù)庫表的命令介紹
使用XML字段批量更新數(shù)據(jù)庫
oracle和sqlserver數(shù)據(jù)庫直接生成xml
將經(jīng)緯度坐標批量導入Google Earth的方法
MySQL入門指南
oracle復制表數(shù)據(jù),復制表結構
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服