次の方法で共有


SQL Server と Azure SQL Database でのグラフ処理

適用対象: SQL Server 2017 (14.x) 以降のバージョン Azure SQL Database Azure SQL Managed Instance SQL データベース

SQL Server には、多対多リレーションシップをモデル化するためのグラフ データベース機能が用意されています。 グラフリレーションシップは Transact-SQL に統合され、SQL Server を基本データベース管理システムとして使用する利点を受け取ります。

グラフ データベースとは

グラフ データベースは、ノード ("頂点") とエッジ ("リレーションシップ") のコレクションです。 ノードはエンティティ (たとえば、個人や組織) を表し、エッジは接続されている 2 つのノード間のリレーションシップ (たとえば、お気に入りや友人) を表します。 ノードとエッジの両方にプロパティが関連付けられている場合があります。 グラフ データベースを特徴付けるいくつかの特性を次に示します。

  • エッジ (リレーションシップ) は、グラフ データベース内のファースト クラスのエンティティであり、属性またはプロパティを関連付けることができます。
  • 1 つのエッジは、グラフ データベース内の複数のノードを柔軟に接続できます。
  • パターン マッチングとマルチホップ ナビゲーション クエリを簡単に表現できます。
  • 推移閉包およびポリモーフィック クエリを簡単に表現できます。

グラフ データベースを使用する場合

リレーショナル データベースは、グラフ データベースで可能なあらゆるものを実現できます。 ただし、グラフ データベースを使用すると、特定の種類のクエリを簡単に表現できます。 また、特定の最適化では、特定のクエリのパフォーマンスが向上する場合があります。 リレーショナル データベースまたはグラフ データベースを選択するかどうかは、次の要因に基づきます。

  • アプリケーションには階層データがあります。 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;

次の図は、ノードとエッジをテーブルとして格納する方法を示しています。

ノードとエッジがテーブルとして格納されていることを示す図。

クエリ言語拡張機能

パターン マッチングとグラフ内のマルチホップ ナビゲーションをサポートするために、新しい 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 データベース エンジン に完全に統合

グラフ拡張機能は、SQL Server エンジンに完全に統合されています。 グラフ データの格納とクエリには、同じストレージ エンジン、メタデータ、クエリ プロセッサなどを使用します。 1 つのクエリでグラフデータとリレーショナル データ間でクエリを実行します。 グラフ機能を列ストア インデックス、HA、R サービス、etc. SQL グラフなどの他の SQL Server テクノロジと組み合わせることで、SQL Server で使用できるすべてのセキュリティ機能とコンプライアンス機能もサポートされます。

ツールとエコシステム

SQL Server が提供する既存のツールとエコシステムを活用します。 バックアップと復元、インポートとエクスポート、BCP などのツールは、すぐに使用できます。 SSIS、SSRS、Power BI などの他のツールやサービスは、リレーショナル テーブルと同様にグラフ テーブルを操作します。

エッジ制約

エッジ制約はグラフ エッジ テーブルで定義され、特定のエッジ タイプが接続できるノード テーブルのペアです。 エッジ制約は、開発者が特定のエッジが接続できるノードの種類を制限するのに役立ちます。

エッジ制約を作成して使用する方法の詳細については、「 Edge 制約を参照してください。

DML のマージ

MERGE ステートメントは、ソース テーブルとの結合の結果に基づいて、ターゲット テーブルに対して挿入、更新、または削除操作を実行します。 たとえば、ターゲット テーブルとソース テーブルの違いに基づいて、ターゲット テーブル内の行を挿入、更新、または削除することで、2 つのテーブルを同期できます。 MERGE ステートメントでの MATCH 述語の使用が、Azure SQL Database と SQL Server vNext でサポートされるようになりました。 つまり、別の INSERT/UPDATE/DELETE ステートメントではなく、MATCH 述語を使用して現在のグラフ データ (ノードまたはエッジ テーブル) を新しいデータとマージして、1 つのステートメントでグラフリレーションシップを指定できるようになりました。

マージ DML で一致を使用する方法の詳細については、 MERGE ステートメントを参照してください。

最短パス

SHORTEST_PATH関数は、グラフ内の任意の 2 つのノード間、または特定のノードからグラフ内の他のすべてのノードへの最短パスを検索します。 SHORTEST PATH は、推移的なクロージャを検索したり、グラフ内の任意の長さのトラバーサルに使用したりすることもできます。

Fabric SQL データベース

Fabric SQL データベースでは、SQL Graph は許可されますが、Node テーブルと Edge テーブルは Fabric OneLake にミラーリングされません。