SQL Server 和 Azure SQL Database 的圖表處理

適用於: SQL Server 2017 (14.x) 和更新版本Azure SQL DatabaseAzure SQL 受控執行個體

SQL Server 提供圖形資料庫功能來建立多對多關聯性的模型。 圖表關聯性會整合到 Transact-SQL 中,並享有使用 SQL Server 作為基礎資料庫管理系統的優點。

什麼是圖形資料庫?

圖形資料庫是節點(或頂點)和邊緣(或關聯性)的集合。 節點代表實體(例如人員或組織)和邊緣代表其連接之兩個節點之間的關聯性(例如,例如,贊或朋友)。 節點和邊緣可能都有與其相關聯的屬性。 以下是讓圖表資料庫變成唯一的一些功能:

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

使用圖形資料庫的時機

關係資料庫可以達成圖形資料庫可以達到的任何專案。 不過,圖形資料庫可讓您更輕鬆地表達特定種類的查詢。 此外,透過特定優化,某些查詢的執行效能可能會更好。 您選擇關係資料庫或圖形資料庫的決定是以下列因素為基礎:

  • 您的應用程式具有階層式資料。 HierarchyID 資料類型可用來實作階層,但有一些限制。 例如,它不允許您儲存節點的多個父系。
  • 您的應用程式具有複雜的多對多關聯性;隨著應用程式的發展,會新增新的關聯性。
  • 您需要分析互連的資料和關聯性。

SQL Server 2017 中引進的圖形功能 (14.x)

SQL Server 2017 引進了下列功能。

建立繪圖物件

Transact-SQL 延伸模組可讓使用者建立節點或邊緣資料表。 節點和邊緣都可以有與其相關聯的屬性。 因為節點和邊緣會儲存為數據表,因此節點或邊緣資料表支援關聯式資料表上支援的所有作業。 以下為範例:

CREATE TABLE Person (ID INTEGER PRIMARY KEY, Name VARCHAR(100), Age INT) AS NODE;
CREATE TABLE friends (StartDate date) AS EDGE;

下圖顯示如何將 Nodes 和 Edge 儲存為數據表。

Diagram showing the Nodes and Edges are stored as tables.

查詢語言延伸模組

引進了新的 MATCH 子句,以支援透過圖形的模式比對和多重躍點流覽。 函 MATCH 式會使用 ASCII 藝術樣式語法進行模式比對。 例如,若要尋找 「John」 的朋友:

-- Find friends of John
SELECT Person2.Name 
FROM Person Person1, Friends, Person Person2
WHERE MATCH(Person1-(Friends)->Person2)
AND Person1.Name = 'John';

完全整合在 SQL Server Database Engine 中

圖形延伸模組已完全整合在 SQL Server 引擎中。 使用相同的儲存引擎、中繼資料、查詢處理器等來儲存和查詢圖形資料。 在單一查詢中跨圖形和關聯式資料進行查詢。 結合圖表功能與其他 SQL Server 技術,例如資料行存放區索引、HA、R 服務等。SQL 圖形也支援 SQL Server 提供的所有安全性和合規性功能。

工具和生態系統

受益于 SQL Server 提供的現有工具和生態系統。 備份和還原、匯入和匯出等工具,BCP 只需立即運作即可。 SSIS、SSRS 或 Power BI 等其他工具或服務會使用圖表資料表,就像使用關聯式資料表一樣。

邊緣條件約束

邊緣條件約束是在圖形邊緣資料表上定義,而且是給定邊緣類型可以連接的一對節點資料表。 邊緣條件約束可協助開發人員限制指定邊緣可以連線的節點類型。

若要深入瞭解如何建立和使用邊緣條件約束,請參閱 Edge 條件約束

合併 DML

MERGE 語句會根據與來源資料表聯結的結果,對目標資料表執行插入、更新或刪除作業。 例如,您可以根據目標資料表與來源資料表之間的差異,插入、更新或刪除目標資料表中的資料列,以同步處理兩個數據表。 Azure SQL Database 和 SQL Server vNext 現在支援在 MERGE 語句中使用 MATCH 述詞。 也就是說,現在可以使用 MATCH 述詞在單一語句中指定圖形關聯性,而不是個別的 INSERT/UPDATE/DELETE 子句,將目前的圖形資料(節點或邊緣資料表)與新的資料合併。

若要深入瞭解如何在合併 DML 中使用比對,請參閱 MERGE 語句

最短路徑

SHORTEST_PATH 函式會尋找圖表中任兩個節點之間的最短路徑,或從指定的節點開始到圖形中所有其他節點之間的最短路徑。 SHORTEST PATH 也可以用來尋找可轉移的關閉或圖形中的任意長度周遊。

下一步