国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

Microsoft SQL Server 2005 的 XML 最佳實施策略

2024-08-31 00:49:58
字體:
來源:轉載
供稿:網友

  摘要:了解 sql server 2005 中的 xml 數據建模和使用準則,并觀察一些說明性的示例。

  簡介

  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 提供了一種強大的平臺,以便針對半結構化和非結構化的數據管理開發(fā)功能豐富的應用程序。

  本文提供了 sql server 2005 中的 xml 數據建模和使用準則。它包含以下兩個主題:

  • 數據建模

  xml 數據可用多種方式存儲在 sql server 2005 中,例如,使用原生 xml 數據類型和分散到表中的 xml。本主題提供了做出適當的選擇以便對 xml 數據進行建模的準則。同時,還討論了將 xml 數據編入索引、屬性提升和 xml 實例的類型化。

  • 用法

  本主題討論了與用法相關的主題(如將 xml 數據加載到服務器以及查詢編譯中的類型推理),解釋和區(qū)分了密切相關的功能,并推薦了這些功能的適當使用。文中通過示例闡述了各種概念。

商業(yè)源碼熱門下載www.html.org.cn

|||

  為了最大限度地領會本文的內容,您應該對 sql server 環(huán)境中的 xml 功能有一個基本的了解。

  數據建模

  本節(jié)概述了使用 sql server 2005 中的 xml 的理由,提供了在原生 xml 存儲和 xml 視圖技術之間進行選擇的準則,并且提供了數據建模建議。

  關系或 xml 數據模型

  如果您的數據是高度結構化的,具有已知的架構,則關系模型可能對于數據存儲最為有效。microsoft sql server 提供了您可能需要的必要功能和工具。另一方面,如果結構是靈活的(半結構化和非結構化)或未知的,則必須適當地考慮如何對此類數據進行建模。

  如果您需要獨立于平臺的模型,以便確保使用結構化和語義標記的數據的可移植性,則 xml 是一種不錯的選擇。而且,如果滿足下列某些屬性,則它還是一種適當的選擇:

  • 您的數據比較稀疏,或者您不了解數據的結構,或者數據的結構將來可能發(fā)生重大更改。

  • 您的數據表示容器層次結構(與實體中的引用相對),并且可能是遞歸的。

  • 您的數據具有內在的順序。

  • 您希望對數據進行查詢,或者基于其結構更新部分數據。

  如果上述任一條件都不滿足,則您應該使用關系數據模型。例如,如果您的數據是 xml 格式,但您的應用程序很少使用數據庫來存儲和檢索數據,則 [n]varchar(max) 列就能滿足您的全部需要。在 xml 列中存儲數據可以帶來其他好處 - 引擎將檢查數據格式規(guī)范或者有效,并且支持對 xml 數據進行細粒度的查詢和更新。

  在 sql server 2005 中存儲 xml 數據的理由

  以下為一些使用 sql server 2005 中的原生 xml 功能而不是在文件系統中管理 xml 數據的理由:

  • 您希望使用數據庫服務器的管理功能來管理 xml 數據(例如,備份、恢復和復制)。

,歡迎訪問網頁設計愛好者web開發(fā)。|||

  • 您希望以高效的方式和事務處理方式來共享、查詢和修改 xml數據。細粒度的數據訪問對于您的應用程序而言很重要。例如,您可能需要提取 xml 文檔內部的某些節(jié),或者您可能需要插入一個新節(jié)而不是替換整個文檔。

  • 您具有關系數據和 sql 應用程序,您希望在應用程序內部的關系數據和 xml 數據之間進行互操作。對于跨域應用程序,您需要有關查詢和數據修改的語言支持。

  • 您希望服務器能夠保證數據格式規(guī)范,并能夠視情況根據 xml 架構來驗證數據。

  • 您需要將 xml 數據編入索引以便實現高效的查詢處理和良好的可伸縮性,并且使用一流的查詢優(yōu)化器。

  • 您希望對 xml 數據進行 soap、ado.net 和 ole db 訪問。

  如果不滿足上述任一條件,您最好將數據存儲為非 xml 的大型數據類型,如 [n]varchar(max) 或 varbinary(max)。

  xml 存儲選項

  sql server 2005 中的 xml 的存儲選項如下所示:

  • 本機存儲采用 xml 數據類型:

  用能夠保留數據的 xml 內容(如容器層次結構、文檔順序、元素和屬性值等等)的內部表示形式存儲數據。它可能不是文本 xml 的精確副本,因為未保留以下信息:無關緊要的空格、屬性順序、命名空間前綴和 xml 聲明。

  對于類型化的 xml 數據類型(即綁定到 xml 架構的 xml 數據類型)而言,負責向信息集添加類型信息的后架構驗證信息集 (post schema validation infoset, psvi) 以內部表示形式編碼。這會顯著提高分析速度。

  • xml 和關系存儲之間的映射:

  使用帶有批注的架構 (axsd),xml 將被分解到一個或多個表中的列,并且在關系級別保留數據的保真度 - 保留層次結構,但忽略元素順序。架構不能是遞歸的。

|||

  • 大型對象存儲([n]varchar(max) 和 varbinary(max)):

  存儲了數據的精確副本。這對于特殊用途的應用(如法律文檔)很有用。大多數應用不要求精確副本,xml 內容(信息集保真度)即可滿足需要。

  通常情況下,可能需要組合使用這些方法。例如,您可能需要用 xml 數據類型列存儲 xml 數據,并將其中的屬性提升到關系列中。相反,您可能希望使用映射技術,將非遞歸部分存儲到非 xml 列中,而僅將遞歸部分存儲到 xml 數據類型列中。

  xml 技術的選擇

  xml 技術(原生 xml 與 xml 視圖)的選擇通常取決于下列因素:

  • 存儲選項:

  您的 xml 數據可能更適合于大型對象存儲(例如,產品手冊),或者更適合于存儲在關系列中(例如,轉換到 xml 的行項目)。每個存儲選項都在不同程度上保留了文檔保真度。

  • 查詢功能:

  基于查詢的性質以及對 xml 數據進行查詢的程度,您可能發(fā)現一個存儲選項比其他存儲選項更為適合。細粒度的 xml 數據查詢(例如,xml 節(jié)點上的謂詞計算)在這兩個存儲選項中受到不同程度的支持。

  • 將 xml 數據編入索引:

  您可能希望將 xml 數據編入索引,以便提高 xml 查詢性能。索引選項隨存儲選項的不同而不同;您需要進行適當的選擇以優(yōu)化工作量。

  • 數據修改功能:

  某些工作量涉及到對 xml 數據進行細粒度的修改(例如,在文檔內添加新節(jié)),而其他工作量則不涉及(例如,web 內容)。對于您的應用程序而言,數據修改語言支持可能很重要。

  • 架構支持:

  您的 xml 數據可能通過架構進行描述,這可能是也可能不是 xml 架構文檔。對架構綁定 xml 的支持取決于 xml 技術。

  • 網站運營seo文章大全
  • 提供全面的站長運營經驗及seo技術!
  • |||

      不用說,不同的選擇具有不同的性能特性。

      原生 xml 存儲

      可以將您的 xml 數據存儲在服務器的 xml 數據類型列中。在下列情況下,這將是一個適當的選擇:

      • 您需要一種在服務器上存儲 xml 數據的簡單方法,同時需要保留文檔順序和文檔結構。

      • 您的 xml 數據可能有也可能沒有架構。

      • 您需要查詢和修改您的 xml 數據。

      • 您需要將 xml 數據編入索引以便實現更為快速的查詢處理。

      • 您的應用程序需要系統目錄視圖以管理您的 xml 數據和 xml 架構。

      當您的 xml 文檔具有多種結構時,或者當您的 xml 文檔符合不同的或復雜的架構,而這些架構很難映射到關系結構時,原生 xml 存儲將很有用。

      示例:使用 xml 數據類型對 xml 數據進行建模

      考慮一個 xml 格式的產品手冊,其中每個主題對應單獨的一章,而每章內又有多節(jié)。一節(jié)可以包含多個子節(jié),因此 是一個遞歸元素。產品手冊包含大量混合內容、圖表和技術資料;數據是半結構化的。用戶可能希望對感興趣的主題執(zhí)行與上下文有關的搜索(例如,在有關"索引"的章內部搜索有關"聚集索引"的節(jié)),并且查詢技術數量。

      xml 文檔的合適存儲模型是 xml 數據類型列。這可以保留 xml 數據的信息集內容。將 xml 列編入索引可以提高查詢性能。

      示例:保留 xml 數據的精確副本

      假設政府法令要求您保留 xml 文檔(例如,已簽署的文檔、法律文檔或股票交易訂單)的精確文本副本。您可能需要將您的文檔存儲在 [n]varchar(max) 列中。

      對于查詢,可在運行時將數據轉換為 xml 數據類型,然后對其執(zhí)行 xquery。運行時轉換可能代價高昂,尤其是在文檔很大時。如果您經常進行查詢,可以采用冗余方式將文檔存儲在 xml 數據類型列中并將其編入索引,同時從 [n]varchar(max) 列返回精確的文檔副本。


    |||

      xml 列可能是基于 [n]varchar(max) 列的計算列。您不能在 xml 計算列上創(chuàng)建 xml 索引,也不能在 [n]varchar(max) 或 varbinary(max) 列上生成 xml 索引。

      xml 視圖技術

      通過在 xml 架構和數據庫的表之間定義映射,可以創(chuàng)建持久性數據的"xml 視圖"。可以使用 xml 批量負載來填充使用 xml 視圖的基礎表。您可以查詢使用 xpath 1.0 的 xml 視圖;該查詢將被轉換為針對表的 sql 查詢。與此類似,更新也會被傳遞到這些表。

      在以下情況下,此技術很有用:

      • 您希望擁有以 xml 為中心的編程模型,該模型使用現有關系數據上的 xml 視圖。

      • 您的 xml 數據具有架構 (xsd, xdr),它可能由外部合作伙伴提供。

      • 數據的順序不重要,或者您的可查詢數據不是遞歸的,或者預先已經知道最大遞歸深度。

      • 您希望通過使用 xpath 1.0 的 xml 視圖來查詢和修改數據。

      • 您希望批量加載 xml 數據,并將其分解到使用 xml 視圖的基礎表中。

      這方面的例子包括以 xml 形式公開以便用于數據交換和 web 服務的關系數據,以及具有固定架構的 xml 數據。

      示例:使用帶有批注的 xml 架構 (axsd) 對數據進行建模

      假設您現有一些希望以 xml 形式進行操作的關系數據(例如,客戶、訂單和行項目)。請使用 axsd 在關系數據上定義 xml 視圖。通過 xml 視圖,可以將 xml 數據批量加載到表中,以及使用 xml 視圖查詢和更新關系數據。如果您需要在自己的 sql 應用程序持續(xù)工作時與其他應用程序中的 xml 標記交換數據,則該模式很有用。

      混合模型

      很多時候,適合將關系數據和 xml 數據類型列結合起來進行數據建模。可以將 xml 數據中的某些值存儲在關系列中,而將其余或全部 xml 值存儲在 xml 列中。這可能會產生更好的性能(例如,可以完全控制在關系列上創(chuàng)建的索引)和鎖定特性。然而,這需要您承擔更多的責任來管理數據存儲。


    |||

      要存儲在關系列中的值取決于您的工作負荷。例如,如果您基于路徑表達式 /customer/@custid 檢索全部 xml 值,則通過將 custid 屬性的值提升到關系列中以及將其編入索引,可能產生更高的查詢性能。另一方面,如果您的 xml 數據被廣泛且非冗余地分解到關系列中,則重新組合的成本可能很大。

      對于高度結構化的 xml 數據(例如,表的內容已經轉換到 xml),可以將所有值映射到關系列(可能使用 xml 視圖技術)。

      使用 xml 數據類型進行數據建模

      本節(jié)討論有關原生 xml 存儲的數據建模主題。這些主題包括將 xml 數據編入索引、屬性提升和類型化 xml 數據類型。

      相同或不同的表

      xml 數據類型列可以在包含其他關系列的表中創(chuàng)建,也可以在與主表之間具有外鍵關系的獨立表中創(chuàng)建。

      在滿足下列某個條件時,請在同一個表中創(chuàng)建 xml 數據類型列:

      • 您的應用程序在 xml 列上執(zhí)行數據檢索,并且不需要 xml 列上的 xml 索引。 或者

      • 您需要在 xml 數據類型列上生成 xml 索引,并且主表的主鍵與其聚集鍵相同。有關詳細信息,請參閱將 xml 數據類型列編入索引一節(jié)。

      在滿足下列條件時,請在單獨的表中創(chuàng)建 xml 數據類型列:

      • 您需要在 xml 數據類型列上生成 xml 索引,但主表的主鍵與其聚集鍵不同,或者主表不具有主鍵,或者主表是一個堆(也就是說,沒有聚集鍵)。如果主表已經存在,則這可能是真的。

      • 您不希望表掃描由于表中存在 xml 列(無論它是存儲在行中還是存儲在行外,都會占用空間)而降低速度。

      xml 數據的粒度

      xml 列中存儲的 xml 數據的粒度對于鎖定和更新特性而言至關重要。sql server 對 xml 和非 xml 數據采用了相同的鎖定機制。因此,行級鎖定會導致相應行中的所有 xml 實例被鎖定。當粒度比較大時,鎖定大型 xml 實例以便進行更新會導致多用戶場合下的吞吐量下降。另一方面,嚴重的分解會丟失對象封裝并提高重新組合成本。

  • 本文來源于網頁設計愛好者web開發(fā)社區(qū)http://www.html.org.cn收集整理,歡迎訪問。
  • |||

      對 xml 實例進行更新會將現有實例替換為更新后的實例,即使只修改單個屬性的值。xml 數據粒度越大,更新成本就越高。較小的 xml 實例會產生較高的更新性能。

      對于良好的設計而言,重要的是保持數據建模需要與鎖定和更新特性之間的平衡。

      非類型化、類型化和受約束的 xml 數據類型

      sql server 2005 xml 數據類型實現了 iso sql-2003 標準 xml 數據類型。因此,它可以在非類型化 xml 列中存儲格式規(guī)范的 xml 1.0 文檔以及帶有文本節(jié)點和任意數量頂級元素的所謂的 xml 內容片段。系統將檢查數據的格式是否規(guī)范,不要求將列綁定到 xml 架構,并且拒絕在擴展意義上格式不規(guī)范的數據。對于非類型化 xml 變量和參數,也是如此。

      如果您具有描述 xml 數據的 xml 架構,則可以將這些架構與 xml 列相關聯,以便產生類型化 xml。xml 架構用于對數據進行有效性驗證,在查詢和數據修改語句編譯過程中執(zhí)行比非類型化 xml 更準確的類型檢查,以及優(yōu)化存儲和查詢處理。

      在下列條件下,請使用非類型化 xml 數據類型:

      • 您沒有對應于 xml 數據的架構

      • 您擁有架構,但不希望服務器對數據進行有效性驗證。當應用程序在服務器中存儲數據之前執(zhí)行客戶端驗證時,或者暫時存儲根據架構無效的 xml 數據時,或者使用在服務器中不受支持的架構組件(例如 key/keyref)時,有時會出現這種情況。

      在下列條件下,請使用類型化 xml 數據類型:

      • 您擁有對應于 xml 數據的架構,并且希望服務器按照 xml 架構對 xml 數據進行有效性驗證。

      • 您希望充分利用基于類型信息的存儲和查詢優(yōu)化。

      • 您希望在查詢的編譯過程中更充分地利用類型信息。

  • 網站運營seo文章大全
  • 提供全面的站長運營經驗及seo技術!
  • |||

      類型化 xml 列、參數和變量可以存儲 xml 文檔或內容 - 您在聲明時必須將它們指定為標志(分別指定為 document 或 content)。而且,您必須提供 xml 架構集合。如果每個 xml 實例恰好有一個頂級元素,請指定 document;否則,請使用 content。查詢編譯器在查詢編譯過程的類型檢查中使用 document 標記來推理唯一的頂級元素。

      除了將 xml 列類型化以外,您還可以在類型化或非類型化 xml 數據類型列上使用關系(列或行)約束。在下列條件下,請使用約束:

      • 無法在 xml 架構中表示業(yè)務規(guī)則。例如,花店的送貨地址必須在其營業(yè)地點周圍 50 英里范圍之內,這可以編寫為 xml 列上的約束。該約束可能涉及到 xml 數據類型方法。

      • 您的約束涉及到表中的其他 xml 列或非 xml 列。這方面的一個例子是:強制 xml 實例中存在的 customer id (/customer/@custid) 與關系 customerid 列中的值匹配。

      文檔類型定義 (dtd)

      xml 數據類型列、變量和參數可以使用 xml 架構而不是 dtd 加以類型化。然而,對于非類型化和類型化 xml,都可以使用內聯 dtd 來提供默認值,以便將實體引用替換為它們的擴展形式。

      您可以使用第三方工具將 dtd 轉化為 xml 架構文檔,并且將 xml 架構加載到數據庫中。

      將 xml 數據類型列編入索引

      可以在 xml 數據類型列上創(chuàng)建 xml 索引。這會將該列中 xml 實例上的所有標記、值和路徑編入索引,從而提高查詢性能。在下列條件下,您的應用程序可能受益于 xml 索引:

      • 對 xml 列進行查詢在您的工作負荷中很常見。必須考慮數據修改過程中的 xml 索引維護成本。

      • xml 值相對較大,而檢索的部分相對較小。生成索引可以避免在運行時分析全部數據,并且因為受益于索引查找而提高查詢處理的性能。


    |||

      xml 列上的第一個索引是"主 xml 索引"。通過該索引,可以在 xml 列上創(chuàng)建三種類型的輔助 xml 索引,從而提高常見種類的查詢的速度,如下節(jié)所述。

      主 xml 索引

      這會將 xml 列中的 xml 實例內部的所有標記、值和路徑編入索引。基表(即包含 xml 列的表)必須在該表的主鍵上具有聚集索引;主鍵用于將索引行與基表中的行相關聯。從 xml 列中檢索完整的 xml 實例(例如 select *)。查詢使用主 xml 索引,并返回標量值或使用索引本身的 xml 子樹。

    示例:創(chuàng)建主 xml 索引

      在我們的多數示例中,都使用帶有非類型化 xml 列的表 t (pk int primary key, xcol xml),這些示例都可以簡單地擴展為類型化 xml 的形式(有關使用類型化 xml 的信息,請參閱 sql server 2005 聯機圖書)。為了便于說明,將針對如下所示的 xml 數據實例描述查詢:

    <book genre="security" publicationdate="2002" isbn="0-7356-1588-2">
       <title>writing secure code</title>
       <author>
          <first-name>michael</first-name>
          <last-name>howard</last-name>
       </author>
       <author>
          <first-name>david</first-name>
          <last-name>leblanc</last-name>
       </author>
       <price>39.99</price>
    </book>

      下面的語句在表 t 的 xml 列 xcol 上創(chuàng)建了名為 idx_xcol 的 xml 索引:

    create primary xml index idx_xcol on t (xcol)輔助 xml 索引

      在創(chuàng)建主 xml 索引之后,您可能希望創(chuàng)建輔助 xml 索引來提高工作負荷中的不同種類查詢的速度。三種類型的輔助 xml 索引 - path、property 和 value 分別為基于路徑的查詢、自定義屬性管理場合和基于值的查詢提供幫助。path 索引在列中的所有 xml 實例上,按照文檔順序生成各個 xml 節(jié)點的 (path, value) 對的 b+ 樹。property 索引創(chuàng)建各個 xml 實例中 (pk, path, value) 對的聚集 b+ 樹,其中 pk 是基表的主鍵。最后,value 索引在 xml 列中的所有 xml 實例中,按照文檔順序創(chuàng)建各個節(jié)點的 (value, path) 對的 b+ 樹。

    發(fā)表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發(fā)表
    主站蜘蛛池模板: 佛山市| 同仁县| 汨罗市| 池州市| 故城县| 理塘县| 南召县| 个旧市| 连江县| 项城市| 宁乡县| 庆云县| 宜阳县| 尤溪县| 霸州市| 苗栗市| 越西县| 西乌珠穆沁旗| 郸城县| 屯昌县| 铜梁县| 天台县| 英山县| 白城市| 台中县| 山阴县| 潍坊市| 黄梅县| 元朗区| 太保市| 佛冈县| 五峰| 海伦市| 巴林左旗| 霞浦县| 康乐县| 宣化县| 绥芬河市| 铜川市| 建德市| 邵武市|