Azure SQL Database 和 SQL 受控執行個體的多模型功能

適用于:Azure SQL資料庫 Azure SQL 受控執行個體

多模型資料庫可讓您以多個格式儲存和使用資料,例如,關聯式資料、圖形、JSON 或 XML 文件、空間資料和機碼值組。

Azure SQL 系列產品會使用關聯式模型,為各種一般用途的應用程式提供最佳效能。 不過,Azure SQL 產品 (例如 Azure SQL Database 和 SQL 受控執行個體) 不限於關聯式資料。 它們可讓您使用緊密整合到關聯式模型的非關聯式格式。

在下列情況下,請考慮使用 Azure SQL 的多模型功能:

  • 您有一些更適合 NoSQL 模型的資訊或結構,而且您不想使用不同的 NoSQL 資料庫。
  • 大部分資料都適用於關聯式模型,而且您需要在 NoSQL 樣式中建立部分資料的模型。
  • 您想要使用 Transact-SQL 語言來查詢和分析關聯式和 NoSQL 資料,然後將該資料與可使用 SQL 語言的工具和應用程式整合。
  • 您想要套用資料庫功能,例如記憶體內部技術,以改善分析的效能或 NoSQL 資料結構的處理。 您可以使用異動複寫可讀取的複本來建立資料的複本,並從主資料庫卸載一些分析工作負載。

下列各節描述 Azure SQL 最重要的多模型功能。

注意

您可以在相同的 Transact-SQL 查詢中使用 JSON 路徑運算式、XQuery/XPath 運算式、空間函式和圖形查詢運算式,以存取您儲存在資料庫中的任何資料。 任何執行 Transact-SQL 查詢的工具或程式設計語言,也可以使用該查詢介面來存取多模型資料。 這是與多模型資料庫 (例如Azure Cosmos DB) 的主要差異,其可提供資料模型的特殊 API。

Graph 功能

Azure SQL 產品提供圖形資料庫功能,以將資料庫中的多對多關聯性模型化。 圖形是節點 (或頂點) 和邊緣 (或關聯性) 的集合。 節點代表實體 (例如,人員或組織)。 邊緣代表它所連接的兩個節點之間的關聯性 (例如,按讚或好友)。

以下是讓圖表資料庫變成唯一的一些功能:

  • 邊緣是圖形資料庫中的第一級實體。 它們可以有相關聯的屬性或內容。
  • 單一邊緣可以彈性地連接圖形資料庫中的多個節點。
  • 您可以輕鬆地表達模式比對和多躍點導覽查詢。
  • 您可以輕鬆地表達遞移閉包和多型查詢。

Graph 關聯性和圖形查詢功能都已整合到 Transact-SQL 中,並享有使用 SQL Server 資料庫引擎作為基礎資料庫管理系統的優點。 Graph 功能使用以圖形 MATCH 運算子增強的標準 Transact-SQL 查詢來查詢圖形資料。

關聯式資料庫可達成圖形資料庫所能進行的任何作業。 不過,圖形資料庫可以輕鬆地表達某些查詢。 您可以根據下列因素來決定選擇哪一種:

  • 您需要建立階層式資料模型,其中一個節點可以有多個父系,因此您無法使用 hierarchyId 資料類型
  • 您的應用程式有複雜的多對多關聯性。 隨著應用程式演進,會加入新的關聯性。
  • 您需要分析互連的資料和關聯性。
  • 您想要使用圖形特定的 T-SQL 搜尋條件,例如 SHORTEST_PATH

JSON 功能

在 Azure SQL 產品中,您可以剖析及查詢以 JavaScript 物件標記法 (JSON) 格式表示的資料,然後將您的關聯式資料匯出成 JSON 文字。 JSON 是 SQL Server 資料庫引擎的核心功能。

JSON 功能可讓您將 JSON 文件放在資料表中,將關聯式資料轉換為 JSON 文件,並將 JSON 文件轉換為關聯式資料。 您可以使用以 JSON 函式增強的標準 Transact-SQL 語言來剖析文件。 您也可以使用非叢集化索引、資料行存放區索引或經記憶體最佳化的資料表,將查詢最佳化。

JSON 是一種用於新式的 Web 與行動應用程式中交換資料的常用資料格式。 JSON 也用於將半結構化的資料儲存在記錄檔或 NoSQL 資料庫。 許多 REST Web 服務會傳回已格式化為 JSON 文字的結果,或接受已格式化為 JSON 的資料。

大部分的 Azure 服務都有會傳回或取用 JSON 的 REST 端點。 這些服務包括 Azure 認知搜尋Azure 儲存體Azure Cosmos DB

如果您有 JSON 文字,您可以透過使用內建的函式 JSON_VALUEJSON_QUERYISJSON,從 JSON 擷取資料或確認 JSON 的格式是否正確。 其他功能包括:

  • JSON_MODIFY:可讓您更新 JSON 文字內的值。
  • OPENJSON:針對更進階的查詢和分析,可以將 JSON 物件陣列轉換成一組資料列。 您可以在傳回的結果集上執行任何 SQL 查詢。
  • FOR JSON:讓您將儲存在關聯式資料表中的資料格式化為 JSON 文字。

說明 JSON 函式的圖表。

如需詳細資訊,請參閱如何使用 JSON 資料

在某些特定情況下,可以使用文件模型,而不是關聯式模型:

  • 結構描述的高度正規化並不會帶來重大優點,因為您可一次存取物件的所有欄位,或您永遠不會更新物件的正規化組件。 不過,正規化模型會增加查詢的複雜度,因為您需要聯結大量資料表才能取得資料。
  • 您正在使用以原生方式使用 JSON 文件的應用程式屬於通訊或資料模型,而且您不想引進可將關聯式資料轉換為 JSON (反之亦然) 的更多層。
  • 您需要將子系資料表或實體物件值模式反正規化,以簡化您的資料模型。
  • 您需要載入或匯出以 JSON 格式儲存的資料,而不需一些可剖析資料的其他工具。

XML 功能

XML 功能可讓您在資料庫中儲存 XML 資料及編製其索引,並使用原生 XQuery/XPath 作業來處理 XML 資料。 Azure SQL 產品具有可處理 XML 資料的特殊內建 XML 資料類型和查詢函式。

SQL Server 資料庫引擎提供一個功能強大的平台,可用來開發應用程式以管理半結構化資料。 XML 的支援會整合到 資料庫引擎的所有元件中,並包含:

  • 能夠以原生方式將 XML 值儲存在 XML 資料類型資料行中,其類型可以是根據 XML 結構描述集合或保持不具類型。 您可以編製 XML 資料行的索引。
  • 針對資料行中儲存的 XML 資料和 XML 類型的變數指定 XQuery 查詢的能力。 您可以將 XQuery 功能使用於任何 Transact-SQL 查詢中,以存取您在資料庫中使用的任何資料模型。
  • 使用主要 XML 索引,自動為 XML 文件中的所有元素編製索引。 或者,您可以使用次要 XML 索引來指定應該編製索引的確切路徑。
  • OPENROWSET,允許大量載入 XML 資料。
  • 將關聯式資料轉換為 XML 格式的能力。

在某些特定情況下,可以使用文件模型,而不是關聯式模型:

  • 結構描述的高度正規化並不會帶來重大優點,因為您可一次存取物件的所有欄位,或您永遠不會更新物件的正規化組件。 不過,正規化模型會增加查詢的複雜度,因為您需要聯結大量資料表才能取得資料。
  • 您正在使用以原生方式使用 XML 文件的應用程式屬於通訊或資料模型,而且您不想引進可將關聯式資料轉換為 JSON (反之亦然) 的更多層。
  • 您需要將子系資料表或實體物件值模式反正規化,以簡化您的資料模型。
  • 您需要載入或匯出以 XML 格式儲存的資料,而不需可剖析資料的其他工具。

空間功能

空間資料代表物件的實體位置和圖形相關資訊。 這些物件可以是點位置或更複雜的物件,例如國家/地區、道路或湖泊。

Azure SQL 支援兩種空間資料類型:

  • 幾何類型代表歐氏 (平面) 座標系統中的資料。
  • 地理類型代表球形地球座標系統中的資料。

Azure SQL 中的空間功能可讓您儲存幾何和地理資料。 您可以使用 Azure SQL 中的空間物件來剖析和查詢以 JSON 格式呈現的資料,並將您的關聯式資料匯出為 JSON 文字。 這些空間物件包括 LineString多邊形。 Azure SQL 也會提供您可以用來改善空間查詢效能的特製化空間索引

空間支援是 SQL Server 資料庫引擎的核心功能。

機碼值組

Azure SQL 產品沒有可支援機碼值組的特製化類型或結構,因為機碼值結構可以原生方式呈現為標準關聯式資料表:

CREATE TABLE Collection (
  Id int identity primary key,
  Data nvarchar(max)
)

您可自訂此索引鍵/值結構以符合您的需求,沒有任何限制。 例如,此值可以是 XML 文件,而不是 nvarchar(max) 類型。 如果該值為 JSON 文件,您可以使用可驗證 JSON 內容有效性的 CHECK 條件約束。 您可以將與一個索引鍵相關的任何數目的值放在其他資料行中。 例如:

  • 新增計算資料行和索引,以簡化並最佳化資料存取。
  • 將資料表定義為經記憶體最佳化的僅限結構描述資料表,以獲得更好的效能。

如需如何有效地將關聯式模型用作索引鍵值組解決方案的範例,請參閱 bwin 如何使用 SQL Server 2016 記憶體內部 OLTP 來達到前所未有的效能和規模。 在此案例研究中,bwin 使用關聯式模型作為其 ASP.NET 快取解決方案,以達到每秒 120 萬個批次。

下一步

多模型功能是 Azure SQL 產品之間共用的核心 SQL Server 資料庫引擎功能。 若要深入了解這些功能,請參閱下列文章: