成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

基于XML的數(shù)據(jù)庫總體分析(上)

運維 數(shù)據(jù)庫運維
XML本身是不是數(shù)據(jù)庫,從嚴(yán)格的意義上來說,XML僅僅意味著XML文檔。XML本身并不能和數(shù)據(jù)庫掛上鉤,但是加上一些其他的輔助工具,我們可以把整個XML看成是一個數(shù)據(jù)庫系統(tǒng),XML文本本身可以看成是數(shù)據(jù)庫中的數(shù)據(jù)區(qū),DTD或者Schemas可以看成是數(shù)據(jù)庫模式設(shè)計,XQL可以看成是數(shù)據(jù)庫查詢語言,SAX或DOM可以看成是數(shù)據(jù)庫處理工具。

為什么要把XML數(shù)據(jù)庫相聯(lián)系呢?舉個例子來說明這個問題,比如你有一個電子商務(wù)的應(yīng)用程序需要使用XML來進行數(shù)據(jù)傳輸。你所關(guān)心的是數(shù)據(jù)本身應(yīng)該具有的結(jié)構(gòu),你并不關(guān)心它在文檔中實際的存儲結(jié)構(gòu)。如果你的應(yīng)用程序很簡單的話,基本的文件系統(tǒng)將滿足你的需求,但如果應(yīng)用本身很復(fù)雜的話,你就需要一個完整的開發(fā)應(yīng)用環(huán)境來支持XML。從另一個方面來說,假設(shè)你有一個Web站點,它的內(nèi)容是由一系列XML文檔構(gòu)成的,你不僅要管理這個站點,同時你需要提供給用戶一個搜索該站點內(nèi)容的機制。而這些都需要借助數(shù)據(jù)庫來實現(xiàn)。

選擇一個數(shù)據(jù)庫的最重要的因素是你是否需要數(shù)據(jù)庫來存儲數(shù)據(jù)或者是文檔,如果你想要存儲數(shù)據(jù)的話,你需要一個關(guān)系數(shù)據(jù)庫或者是對象數(shù)據(jù)庫來存儲實際的數(shù)據(jù),同時你需要中間件在數(shù)據(jù)庫和XML文檔之間建立橋梁關(guān)系,從另一方面來說,如果你想要存儲文檔,你需要一個內(nèi)容管理系統(tǒng),通過它進行文檔的存儲。實際上,XML文檔可以分到兩大類:以數(shù)據(jù)為中心或者以文檔為中心。

以數(shù)據(jù)為中心的文檔:數(shù)據(jù)為中心的文檔有非常規(guī)則的結(jié)果,比如關(guān)于銷售訂單或者是飯店菜單的XML文檔。以數(shù)據(jù)為中心的文檔通常是為機器設(shè)計的,也就是說主要是方便機器進行處理。通常,任何Web站點可以動態(tài)的構(gòu)建HTML文檔,其步驟如下,根據(jù)用戶的查詢請求找到相關(guān)的面向數(shù)據(jù)的XML文檔,然后通過XSL對XML文檔進行轉(zhuǎn)化,讓基于HTML的瀏覽器能夠方便的瀏覽結(jié)果。

以文檔為中心的文檔:以文檔為中心的文檔具有不規(guī)則的結(jié)構(gòu),而且數(shù)據(jù)的粒度也比較大。具體的例子如書本、電子郵件、廣告等等。以文檔為中心的文檔主要是用人類而設(shè)計的。

為了存儲或提取數(shù)據(jù),你可以使用數(shù)據(jù)庫和中間件,或者你可以使用XML服務(wù)器,或者是基于XML的Web服務(wù)器。為了存儲文檔,你需要一個內(nèi)容管理系統(tǒng)或者是可持久化的DOM實現(xiàn)。可以在數(shù)據(jù)庫或者是XML文檔中發(fā)現(xiàn)大量基于數(shù)據(jù)為中心的文檔。這樣我們就需要工具把數(shù)據(jù)從數(shù)據(jù)庫轉(zhuǎn)化成XML文檔,或者把一個XML文檔轉(zhuǎn)換到數(shù)據(jù)庫中。同時需要注意的是,當(dāng)把數(shù)據(jù)存儲到數(shù)據(jù)庫中的時候,需要拋棄一個文檔的很多信息,比如它的名稱和DTD,它的物理結(jié)構(gòu),比如實體定義和使用,一個節(jié)點下元素的位置排列,二進制數(shù)據(jù)的存儲方式等等。同樣,當(dāng)從數(shù)據(jù)庫中提取數(shù)據(jù)的時候,產(chǎn)生的XML文檔通常不包含CDATA或者是實體使用的說明,而且節(jié)點下元素的排列位置只和數(shù)據(jù)庫中記錄的順序位置一致。實際上一個XML文檔存儲到數(shù)據(jù)庫中,再由該數(shù)據(jù)庫生成此XML文檔,這前后兩個文檔格式幾乎不可能完全一樣。

為了在數(shù)據(jù)庫和XML文檔之間傳遞數(shù)據(jù),必須在文檔結(jié)構(gòu)和數(shù)據(jù)庫結(jié)構(gòu)之間建立映射,這種映射可以有兩個分類:模板驅(qū)動和模型驅(qū)動。

1.基于模板驅(qū)動的映射:需要在一個模板中嵌入命令,并用數(shù)據(jù)傳輸中間件進行處理。比如,考慮下面的模板:

  1. <?xml version="1.0"?>  
  2.  
  3. <FlightInfo>  
  4.  
  5. <Intro>The following flights have available seats:</Intro>  
  6.  
  7. <SelectStmt>SELECT Airline, FltNumber, Depart, Arrive FROM Flights</SelectStmt>  
  8.  
  9. <Conclude>W(wǎng)e hope one of these meets your needs</Conclude>  
  10.  
  11. </FlightInfo> 

注意其中嵌入了一個SELECT語句。當(dāng)用數(shù)據(jù)傳輸中間件進行處理的時候,每一個SELECT語句都會被它的結(jié)果所代替,用XML格式化形式表現(xiàn)為:

  1. <?xml version="1.0"?>  
  2.  
  3. <FlightInfo>  
  4.  
  5. <Intro>The following flights have available seats:</Intro>  
  6.  
  7. <Flights>  
  8.  
  9. <Row>  
  10.  
  11. <Airline>ACME</Airline>  
  12.  
  13. <FltNumber>123</FltNumber>  
  14.  
  15. <Depart>Dec 12, 1998 13:43</Depart>  
  16.  
  17. <Arrive>Dec 13, 1998 01:21</Arrive>  
  18.  
  19. </Row>  
  20.  
  21. ...  
  22.  
  23. </Flights>  
  24.  
  25. <Conclude>W(wǎng)e hope one of these meets your needs</Conclude>  
  26.  
  27. </FlightInfo> 

基于模板驅(qū)動的映射可以是相當(dāng)靈活的,比如,一些產(chǎn)品允許你把結(jié)果集放到XML文檔的任何位置,同時可以對SELECT語句設(shè)置參數(shù),并且可以使用for循環(huán)語句和if條件語句等。值得注意的是,當(dāng)前基于模板驅(qū)動的映射只能應(yīng)用于在關(guān)系數(shù)據(jù)庫和XML文檔之間傳遞數(shù)據(jù)。

基于模型驅(qū)動的映射:也就是說把數(shù)據(jù)從數(shù)據(jù)庫傳送到XML文檔是用一個具體的模型實現(xiàn)的,這樣,XSL可以被結(jié)合到基于模型映射的產(chǎn)品上。在XML文檔中,兩種模型是很常見的:表格模型(table model)和數(shù)據(jù)專用對象模型(data-specific object model)。

2.表格模型:許多中間件軟件包用表格模型在XML文檔和關(guān)系數(shù)據(jù)庫之間傳遞數(shù)據(jù)。它把XML文檔表示為一個單一的表格或者是表格的集合。這樣,一個XML文檔的結(jié)構(gòu)可以用如下的形式表示:

  1. <database>  
  2.  
  3. <table>  
  4.  
  5. <row>  
  6.  
  7. <column1>...</column1>  
  8.  
  9. <column2>...</column2>  
  10.  
  11. ...  
  12.  
  13. </row>  
  14.  
  15. ...  
  16.  
  17. </table>  
  18.  
  19. ...  
  20.  
  21. </database> 

這里關(guān)鍵字"talbe"在把數(shù)據(jù)從數(shù)據(jù)庫傳遞到XML文檔的時候,表示一個單一的結(jié)果集,把數(shù)據(jù)從XML文檔傳遞到數(shù)據(jù)庫的時候,表示表示一個單一的表格或者視圖。但是,當(dāng)結(jié)果集合不只一個的時候,或者當(dāng)XML文檔包括多個復(fù)雜嵌套的時候,這種傳遞方式就不能適應(yīng)了。

3.數(shù)據(jù)專用的對象模型:把一個XML文檔表示為由數(shù)據(jù)對象構(gòu)成的樹,每一個元素類型和對象相對應(yīng)。主要在面向?qū)ο蠛蛯哟螖?shù)據(jù)庫中使用,通過傳統(tǒng)的關(guān)系-對象模型也可以映射到關(guān)系數(shù)據(jù)庫中。注意這種模型并不是文檔對象模型(DOM)。比如,銷售訂單文檔可以被看成一個對象樹,其中包括五個類:Orders, SalesOrder, Customer, Line, 和Part。如下所示:

基于XML的數(shù)據(jù)庫總體分析

當(dāng)把一個XML文檔看成是一個以數(shù)據(jù)為中心的對象樹的時候,元素不一定和對象相對應(yīng),比如,一個元素只包含PCDATA,它能夠被當(dāng)成一個屬性,它包括一個單一的,標(biāo)量值。

實際上在XML和數(shù)據(jù)庫之間進行數(shù)據(jù)轉(zhuǎn)化的時候,需要考慮兩個過程:一個是從數(shù)據(jù)庫模式中產(chǎn)生DTD,另外一個是根據(jù)DTD生成數(shù)據(jù)庫模式

從一個DTD中生成一個關(guān)系模式的步驟如下:

1. 對每一個元素,產(chǎn)生一個表和一個主鍵列。

2. 對每一個有混合內(nèi)容的元素,產(chǎn)生一個獨立的表格,用來存儲PCDATA,并通過父表的主鍵和父表相聯(lián)。

3. 對元素類型中的每一個單一值的屬性,對具有只有PCDATA內(nèi)容的子元素(該子元素按順序出現(xiàn)),產(chǎn)生一個單獨的列,如果子元素類型或者值是可以選擇的話,該列就應(yīng)該可以允許為NULL類型。

4. 對有多個值的屬性和可以出現(xiàn)多次的子元素(該子元素PCDATA)的話,需要創(chuàng)建一個單獨的表來存儲這些值,并通過父表的主鍵和父表相聯(lián)。

5. 對每一個包含元素或者混合內(nèi)容的子元素來說,通過父表的主鍵把父元素和子元素聯(lián)接起來。

從一個關(guān)系數(shù)據(jù)庫模式構(gòu)建DTD步驟如下:

1. 對每一個表,創(chuàng)建一個元素。

2. 對表中的每一列,創(chuàng)建一個屬性或者是一個只有PCDATA 內(nèi)容的子元素。

3. 根據(jù)表中的每一主鍵/外鍵關(guān)系,創(chuàng)建該表元素的子元素。

本文就介紹到這里,更多的內(nèi)容我們會在下節(jié)中繼續(xù)介紹。

【編輯推薦】

  1. 基于XML的數(shù)據(jù)庫總體分析(下)
  2. 開發(fā)BI系統(tǒng)時的需求分析研究
  3. 嵌入式數(shù)據(jù)庫Sqlce讀取數(shù)據(jù)過程簡介
  4. 如何不使用數(shù)據(jù)庫緩存,還達到實時更新
責(zé)任編輯:趙鵬 來源: 天極網(wǎng)
相關(guān)推薦

2011-07-12 10:09:08

XML數(shù)據(jù)庫服務(wù)器

2009-02-04 17:36:11

ibmdwXML

2010-04-12 14:55:26

Oracle數(shù)據(jù)庫

2011-03-08 08:49:55

MySQL優(yōu)化單機

2009-07-31 16:29:47

ibmdwXML

2020-03-16 08:16:16

數(shù)據(jù)庫數(shù)據(jù)安全

2020-03-14 16:37:09

數(shù)據(jù)庫IT技術(shù)

2011-04-02 14:38:42

SQL數(shù)據(jù)庫算法

2024-08-22 14:39:34

2010-05-07 13:14:22

數(shù)據(jù)庫負載均衡

2016-11-22 23:02:49

2010-08-26 09:13:02

Infobright

2011-06-07 10:12:27

2025-04-08 06:00:00

2011-07-26 11:12:05

DBXML數(shù)據(jù)庫

2013-03-25 10:26:19

XML數(shù)據(jù)庫

2011-08-22 13:28:56

FOR XMLSQL Server

2010-08-03 14:40:05

DB2數(shù)據(jù)庫

2022-08-15 07:37:56

圖數(shù)據(jù)庫元數(shù)據(jù)技術(shù)

2024-03-13 10:40:00

性能探測工具SQL語句數(shù)據(jù)庫
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 蜜桃精品在线 | 国产精品亚洲一区二区三区在线观看 | 国产欧美精品一区二区 | 日韩久久久久 | 亚洲国产精品视频一区 | 伊人春色成人网 | 青青艹在线视频 | 在线观看国产三级 | 精品国产乱码久久久久久影片 | 精品一区二区三区视频在线观看 | 国产成人免费在线 | 久久精品视频免费观看 | 欧美成人a∨高清免费观看 色999日韩 | 91在线影院 | 天天拍天天操 | 久久国产精品免费 | 国产高清视频在线播放 | 久久亚洲一区二区 | 免费超碰 | 久久久久综合 | 美女黄网| 99riav国产一区二区三区 | 国产日韩欧美一区 | jizz亚洲人 | 精品9999| 亚洲视频免费在线播放 | 一区二区三区在线观看视频 | 日本三级电影在线看 | 日韩免费1区二区电影 | 国产日韩欧美精品一区二区三区 | 超碰成人在线观看 | 日韩欧美三级 | 日本福利视频免费观看 | 我想看一级黄色毛片 | 日韩av在线一区 | 黄色av免费网站 | 亚洲国产成人精品久久 | 欧美 日韩 国产 在线 | 精品视频一区二区 | 涩涩视频在线观看 | 亚洲精品久久久一区二区三区 |