簡介
Microsoft SQL Server 2005 為 XML 數據處理提供了廣泛的支持。XML 值可以自然地存儲在 XML 數據類型列中,而后者可以根據 XML 架構集合進行類型化,或者保持非類型化。可以將 XML 列編入索引。而且,使用 XQuery 和 XML DML(為進行數據修改而進行的擴展)可以支持細粒度的數據操作。
SQL Server 2000 和 SQLXML Web Release 提供了強大的 XML 數據管理功能。這些功能致力于關系數據和 XML 數據之間的映射。可以使用帶有批注的 XSD (AXSD) 來定義關系數據的 XML 視圖,以便提供以 XML 為中心的方法,該方法支持 XML 數據的批量數據加載、查詢和更新功能。Transact-SQL 擴展提供了以 SQL 為中心的方法,以便將關系查詢結果映射到 XML(使用 FOR XML),以及從 XML 生成關系視圖(使用 OpenXML)。這些支持已在 SQL Server 2005 中得到了擴展。結合新增的原生 XML 支持,SQL Server 2005 提供了一種強大的平臺,以便針對半結構化和非結構化的數據管理開發功能豐富的應用程序。
本文提供了 SQL Server 2005 中的 XML 數據建模和使用準則。它包含以下兩個主題:
• 數據建模
XML 數據可用多種方式存儲在 SQL Server 2005 中,例如,使用原生 XML 數據類型和分散到表中的 XML。本主題提供了做出適當的選擇以便對 XML 數據進行建模的準則。同時,還討論了將 XML 數據編入索引、屬性提升和 XML 實例的類型化。
• 用法
本主題討論了與用法相關的主題(如將 XML 數據加載到服務器以及查詢編譯中的類型推理),解釋和區分了密切相關的功能,并推薦了這些功能的適當使用。文中通過示例闡述了各種概念。
為了最大限度地領會本文的內容,您應該對 SQL Server 環境中的 XML 功能有一個基本的了解。請參閱 XML Support in Microsoft SQL Server 2005。
返回頁首
數據建模
本節概述了使用 SQL Server 2005 中的 XML 的理由,提供了在原生 XML 存儲和 XML 視圖技術之間進行選擇的準則,并且提供了數據建模建議。
關系或 XML 數據模型
如果您的數據是高度結構化的,具有已知的架構,則關系模型可能對于數據存儲最為有效。Microsoft SQL Server 提供了您可能需要的必要功能和工具。另一方面,如果結構是靈活的(半結構化和非結構化)或未知的,則必須適當地考慮如何對此類數據進行建模。
如果您需要獨立于平臺的模型,以便確保使用結構化和語義標記的數據的可移植性,則 XML 是一種不錯的選擇。而且,如果滿足下列某些屬性,則它還是一種適當的選擇:
• 您的數據比較稀疏,或者您不了解數據的結構,或者數據的結構將來可能發生重大更改。
• 您的數據表示容器層次結構(與實體中的引用相對),并且可能是遞歸的。
• 您的數據具有內在的順序。
• 您希望對數據進行查詢,或者基于其結構更新部分數據。
如果上述任一條件都不滿足,則您應該使用關系數據模型。例如,如果您的數據是 XML 格式,但您的應用程序很少使用數據庫來存儲和檢索數據,則 [n]varchar(max) 列就能滿足您的全部需要。在 XML 列中存儲數據可以帶來其他好處 - 引擎將檢查數據格式規范或者有效,并且支持對 XML 數據進行細粒度的查詢和更新。
在 SQL Server 2005 中存儲 XML 數據的理由
以下為一些使用 SQL Server 2005 中的原生 XML 功能而不是在文件系統中管理 XML 數據的理由:
• 您希望使用數據庫服務器的管理功能來管理 XML 數據(例如,備份、恢復和復制)。
• 您希望以高效的方式和事務處理方式來共享、查詢和修改 XML數據。細粒度的數據訪問對于您的應用程序而言很重要。例如,您可能需要提取 XML 文檔內部的某些節,或者您可能需要插入一個新節而不是替換整個文檔。
• 您具有關系數據和 SQL 應用程序,您希望在應用程序內部的關系數據和 XML 數據之間進行互操作。對于跨域應用程序,您需要有關查詢和數據修改的語言支持。
• 您希望服務器能夠保證數據格式規范,并能夠視情況根據 XML 架構來驗證數據。
• 您需要將 XML 數據編入索引以便實現高效的查詢處理和良好的可伸縮性,并且使用一流的查詢優化器。
• 您希望對 XML 數據進行 SOAP、ADO.NET 和 OLE DB 訪問。
如果不滿足上述任一條件,您最好將數據存儲為非 XML 的大型數據類型,如 [n]varchar(max) 或 varbinary(max)。
XML 存儲選項
SQL Server 2005