SQL Server 2005 引入原生 XML 資料類型,可在關聯表中直接儲存 XML 文件或片段。本文依據官方文件整理 XML 欄位的資料表設計決策:同表或獨立表、XML 顆粒度、非型別/型別/受約束 XML 的選擇時機,以及 DTD 與 XML Schema 的關係。
SQL Server 對 XML 採用列級鎖定。顆粒度過大(單一 XML 含大量資料)會導致並發更新封鎖;過度分解則喪失物件封裝優勢並增加重組成本。需在建模需求與鎖定/更新特性間取得平衡。
| 類型 | 適用情境 |
|---|---|
| 非型別 XML | 無 Schema、或不想由伺服器驗證(用戶端已驗證/暫存無效 XML/使用伺服器不支援的 Schema 元件)。 |
| 型別 XML | 擁有 Schema,需伺服器驗證、利用型別資訊優化儲存/查詢、編譯期型別檢查。 |
| 受約束 XML | 業務規則無法用 Schema 表達(如地理距離限制)、或約束涉及其他欄位(如 XML 內 CustomerID 需等於關聯欄位)。 |
XML 資料類型僅支援 XML Schema 進行型別化。但非型別/型別 XML 均可使用內嵌 DTD 提供實體參考展開。可用第三方工具將 DTD 轉為 XML Schema 再載入資料庫。