關(guān)系或 xml 數(shù)據(jù)模型
如果您的數(shù)據(jù)是高度結(jié)構(gòu)化的,具有已知的架構(gòu),則關(guān)系模型可能對于數(shù)據(jù)存儲最為有效。microsoft sql server 提供了您可能需要的必要功能和工具。另一方面,如果結(jié)構(gòu)是靈活的(半結(jié)構(gòu)化和非結(jié)構(gòu)化)或未知的,則必須適當(dāng)?shù)乜紤]如何對此類數(shù)據(jù)進(jìn)行建模。
如果您需要獨立于平臺的模型,以便確保使用結(jié)構(gòu)化和語義標(biāo)記的數(shù)據(jù)的可移植性,則 xml 是一種不錯的選擇。而且,如果滿足下列某些屬性,則它還是一種適當(dāng)?shù)倪x擇:
• 您的數(shù)據(jù)比較稀疏,或者您不了解數(shù)據(jù)的結(jié)構(gòu),或者數(shù)據(jù)的結(jié)構(gòu)將來可能發(fā)生重大更改。
• 您的數(shù)據(jù)表示容器層次結(jié)構(gòu)(與實體中的引用相對),并且可能是遞歸的。
• 您的數(shù)據(jù)具有內(nèi)在的順序。
• 您希望對數(shù)據(jù)進(jìn)行查詢,或者基于其結(jié)構(gòu)更新部分?jǐn)?shù)據(jù)。
如果上述任一條件都不滿足,則您應(yīng)該使用關(guān)系數(shù)據(jù)模型。例如,如果您的數(shù)據(jù)是 xml 格式,但您的應(yīng)用程序很少使用數(shù)據(jù)庫來存儲和檢索數(shù)據(jù),則 [n]varchar(max) 列就能滿足您的全部需要。在 xml 列中存儲數(shù)據(jù)可以帶來其他好處 - 引擎將檢查數(shù)據(jù)格式規(guī)范或者有效,并且支持對 xml 數(shù)據(jù)進(jìn)行細(xì)粒度的查詢和更新。
在 sql server 2005 中存儲 xml 數(shù)據(jù)的理由
以下為一些使用 sql server 2005 中的原生 xml 功能而不是在文件系統(tǒng)中管理 xml 數(shù)據(jù)的理由:
• 您希望使用數(shù)據(jù)庫服務(wù)器的管理功能來管理 xml 數(shù)據(jù)(例如,備份、恢復(fù)和復(fù)制)。
• 您希望以高效的方式和事務(wù)處理方式來共享、查詢和修改 xml數(shù)據(jù)。細(xì)粒度的數(shù)據(jù)訪問對于您的應(yīng)用程序而言很重要。例如,您可能需要提取 xml 文檔內(nèi)部的某些節(jié),或者您可能需要插入一個新節(jié)而不是替換整個文檔。
|||注冊會員,創(chuàng)建你的web開發(fā)資料庫,• 您具有關(guān)系數(shù)據(jù)和 sql 應(yīng)用程序,您希望在應(yīng)用程序內(nèi)部的關(guān)系數(shù)據(jù)和 xml 數(shù)據(jù)之間進(jìn)行互操作。對于跨域應(yīng)用程序,您需要有關(guān)查詢和數(shù)據(jù)修改的語言支持。
• 您希望服務(wù)器能夠保證數(shù)據(jù)格式規(guī)范,并能夠視情況根據(jù) xml 架構(gòu)來驗證數(shù)據(jù)。
• 您需要將 xml 數(shù)據(jù)編入索引以便實現(xiàn)高效的查詢處理和良好的可伸縮性,并且使用一流的查詢優(yōu)化器。
• 您希望對 xml 數(shù)據(jù)進(jìn)行 soap、ado.net 和 ole db 訪問。
如果不滿足上述任一條件,您最好將數(shù)據(jù)存儲為非 xml 的大型數(shù)據(jù)類型,如 [n]varchar(max) 或 varbinary(max)。
xml 存儲選項
sql server 2005 中的 xml 的存儲選項如下所示:
• 本機存儲采用 xml 數(shù)據(jù)類型:
用能夠保留數(shù)據(jù)的 xml 內(nèi)容(如容器層次結(jié)構(gòu)、文檔順序、元素和屬性值等等)的內(nèi)部表示形式存儲數(shù)據(jù)。具體說來,就是保留 xml 數(shù)據(jù)的信息集內(nèi)容(有關(guān)信息集的詳細(xì)信息,請參閱 http://www.w3.org/tr/xml-infoset)。它可能不是文本 xml 的精確副本,因為未保留以下信息:無關(guān)緊要的空格、屬性順序、命名空間前綴和 xml 聲明。
對于類型化的 xml 數(shù)據(jù)類型(即綁定到 xml 架構(gòu)的 xml 數(shù)據(jù)類型)而言,負(fù)責(zé)向信息集添加類型信息的后架構(gòu)驗證信息集 (post schema validation infoset, psvi) 以內(nèi)部表示形式編碼。這會顯著提高分析速度。
• xml 和關(guān)系存儲之間的映射:
使用帶有批注的架構(gòu) (axsd),xml 將被分解到一個或多個表中的列,并且在關(guān)系級別保留數(shù)據(jù)的保真度 - 保留層次結(jié)構(gòu),但忽略元素順序。架構(gòu)不能是遞歸的。
• 大型對象存儲([n]varchar(max) 和 varbinary(max)):
|||存儲了數(shù)據(jù)的精確副本。這對于特殊用途的應(yīng)用(如法律文檔)很有用。大多數(shù)應(yīng)用不要求精確副本,xml 內(nèi)容(信息集保真度)即可滿足需要。
通常情況下,可能需要組合使用這些方法。例如,您可能需要用 xml 數(shù)據(jù)類型列存儲 xml 數(shù)據(jù),并將其中的屬性提升到關(guān)系列中。相反,您可能希望使用映射技術(shù),將非遞歸部分存儲到非 xml 列中,而僅將遞歸部分存儲到 xml 數(shù)據(jù)類型列中。
xml 技術(shù)的選擇
xml 技術(shù)(原生 xml 與 xml 視圖)的選擇通常取決于下列因素:
• 存儲選項:
您的 xml 數(shù)據(jù)可能更適合于大型對象存儲(例如,產(chǎn)品手冊),或者更適合于存儲在關(guān)系列中(例如,轉(zhuǎn)換到 xml 的行項目)。每個存儲選項都在不同程度上保留了文檔保真度。
• 查詢功能:
基于查詢的性質(zhì)以及對 xml 數(shù)據(jù)進(jìn)行查詢的程度,您可能發(fā)現(xiàn)一個存儲選項比其他存儲選項更為適合。細(xì)粒度的 xml 數(shù)據(jù)查詢(例如,xml 節(jié)點上的謂詞計算)在這兩個存儲選項中受到不同程度的支持。
• 將 xml 數(shù)據(jù)編入索引:
您可能希望將 xml 數(shù)據(jù)編入索引,以便提高 xml 查詢性能。索引選項隨存儲選項的不同而不同;您需要進(jìn)行適當(dāng)?shù)倪x擇以優(yōu)化工作量。
• 數(shù)據(jù)修改功能:
某些工作量涉及到對 xml 數(shù)據(jù)進(jìn)行細(xì)粒度的修改(例如,在文檔內(nèi)添加新節(jié)),而其他工作量則不涉及(例如,web 內(nèi)容)。對于您的應(yīng)用程序而言,數(shù)據(jù)修改語言支持可能很重要。
• 架構(gòu)支持:
您的 xml 數(shù)據(jù)可能通過架構(gòu)進(jìn)行描述,這可能是也可能不是 xml 架構(gòu)文檔。對架構(gòu)綁定 xml 的支持取決于 xml 技術(shù)。
不用說,不同的選擇具有不同的性能特性。
原生 xml 存儲
|||可以將您的 xml 數(shù)據(jù)存儲在服務(wù)器的 xml 數(shù)據(jù)類型列中。在下列情況下,這將是一個適當(dāng)?shù)倪x擇:
• 您需要一種在服務(wù)器上存儲 xml 數(shù)據(jù)的簡單方法,同時需要保留文檔順序和文檔結(jié)構(gòu)。
• 您的 xml 數(shù)據(jù)可能有也可能沒有架構(gòu)。
• 您需要查詢和修改您的 xml 數(shù)據(jù)。
• 您需要將 xml 數(shù)據(jù)編入索引以便實現(xiàn)更為快速的查詢處理。
• 您的應(yīng)用程序需要系統(tǒng)目錄視圖以管理您的 xml 數(shù)據(jù)和 xml 架構(gòu)。
當(dāng)您的 xml 文檔具有多種結(jié)構(gòu)時,或者當(dāng)您的 xml 文檔符合不同的或復(fù)雜的架構(gòu),而這些架構(gòu)很難映射到關(guān)系結(jié)構(gòu)時,原生 xml 存儲將很有用。
示例:使用 xml 數(shù)據(jù)類型對 xml 數(shù)據(jù)進(jìn)行建模
考慮一個 xml 格式的產(chǎn)品手冊,其中每個主題對應(yīng)單獨的一章,而每章內(nèi)又有多節(jié)。一節(jié)可以包含多個子節(jié),因此 是一個遞歸元素。產(chǎn)品手冊包含大量混合內(nèi)容、圖表和技術(shù)資料;數(shù)據(jù)是半結(jié)構(gòu)化的。用戶可能希望對感興趣的主題執(zhí)行與上下文有關(guān)的搜索(例如,在有關(guān)"索引"的章內(nèi)部搜索有關(guān)"聚集索引"的節(jié)),并且查詢技術(shù)數(shù)量。
xml 文檔的合適存儲模型是 xml 數(shù)據(jù)類型列。這可以保留 xml 數(shù)據(jù)的信息集內(nèi)容。將 xml 列編入索引可以提高查詢性能。
示例:保留 xml 數(shù)據(jù)的精確副本
假設(shè)政府法令要求您保留 xml 文檔(例如,已簽署的文檔、法律文檔或股票交易訂單)的精確文本副本。您可能需要將您的文檔存儲在 [n]varchar(max) 列中。
對于查詢,可在運行時將數(shù)據(jù)轉(zhuǎn)換為 xml 數(shù)據(jù)類型,然后對其執(zhí)行 xquery。運行時轉(zhuǎn)換可能代價高昂,尤其是在文檔很大時。如果您經(jīng)常進(jìn)行查詢,可以采用冗余方式將文檔存儲在 xml 數(shù)據(jù)類型列中并將其編入索引,同時從 [n]varchar(max) 列返回精確的文檔副本。
|||
xml 列可能是基于 [n]varchar(max) 列的計算列。您不能在 xml 計算列上創(chuàng)建 xml 索引,也不能在 [n]varchar(max) 或 varbinary(max) 列上生成 xml 索引。
xml 視圖技術(shù)
通過在 xml 架構(gòu)和數(shù)據(jù)庫的表之間定義映射,可以創(chuàng)建持久性數(shù)據(jù)的"xml 視圖"。可以使用 xml 批量負(fù)載來填充使用 xml 視圖的基礎(chǔ)表。您可以查詢使用 xpath 1.0 的 xml 視圖;該查詢將被轉(zhuǎn)換為針對表的 sql 查詢。與此類似,更新也會被傳遞到這些表。
在以下情況下,此技術(shù)很有用:
• 您希望擁有以 xml 為中心的編程模型,該模型使用現(xiàn)有關(guān)系數(shù)據(jù)上的 xml 視圖。
• 您的 xml 數(shù)據(jù)具有架構(gòu) (xsd, xdr),它可能由外部合作伙伴提供。
• 數(shù)據(jù)的順序不重要,或者您的可查詢數(shù)據(jù)不是遞歸的,或者預(yù)先已經(jīng)知道最大遞歸深度。
• 您希望通過使用 xpath 1.0 的 xml 視圖來查詢和修改數(shù)據(jù)。
• 您希望批量加載 xml 數(shù)據(jù),并將其分解到使用 xml 視圖的基礎(chǔ)表中。
這方面的例子包括以 xml 形式公開以便用于數(shù)據(jù)交換和 web 服務(wù)的關(guān)系數(shù)據(jù),以及具有固定架構(gòu)的 xml 數(shù)據(jù)。有關(guān)詳細(xì)信息,請參閱 sqlxml 開發(fā)人員中心。
示例:使用帶有批注的 xml 架構(gòu) (axsd) 對數(shù)據(jù)進(jìn)行建模
假設(shè)您現(xiàn)有一些希望以 xml 形式進(jìn)行操作的關(guān)系數(shù)據(jù)(例如,客戶、訂單和行項目)。請使用 axsd 在關(guān)系數(shù)據(jù)上定義 xml 視圖。通過 xml 視圖,可以將 xml 數(shù)據(jù)批量加載到表中,以及使用 xml 視圖查詢和更新關(guān)系數(shù)據(jù)。如果您需要在自己的 sql 應(yīng)用程序持續(xù)工作時與其他應(yīng)用程序中的 xml 標(biāo)記交換數(shù)據(jù),則該模式很有用。
混合模型
很多時候,適合將關(guān)系數(shù)據(jù)和 xml 數(shù)據(jù)類型列結(jié)合起來進(jìn)行數(shù)據(jù)建模。可以將 xml 數(shù)據(jù)中的某些值存儲在關(guān)系列中,而將其余或全部 xml 值存儲在 xml 列中。這可能會產(chǎn)生更好的性能(例如,可以完全控制在關(guān)系列上創(chuàng)建的索引)和鎖定特性。然而,這需要您承擔(dān)更多的責(zé)任來管理數(shù)據(jù)存儲。
要存儲在關(guān)系列中的值取決于您的工作負(fù)荷。例如,如果您基于路徑表達(dá)式 /customer/@custid 檢索全部 xml 值,則通過將 custid 屬性的值提升到關(guān)系列中以及將其編入索引,可能產(chǎn)生更高的查詢性能。另一方面,如果您的 xml 數(shù)據(jù)被廣泛且非冗余地分解到關(guān)系列中,則重新組合的成本可能很大。
對于高度結(jié)構(gòu)化的 xml 數(shù)據(jù)(例如,表的內(nèi)容已經(jīng)轉(zhuǎn)換到 xml),可以將所有值映射到關(guān)系列(可能使用 xml 視圖技術(shù))。
新聞熱點
疑難解答
圖片精選