次の方法で共有


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

適用対象: SQL Server 2017 (14.x) 以降 Azure SQL DatabaseAzure SQL Managed Instance

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 サービスなどの他のSQL Server テクノロジと組み合わせる。SQL Graph では、SQL Serverで使用できるすべてのセキュリティ機能とコンプライアンス機能もサポートされています。

ツールとエコシステム

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

エッジ制約

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

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

DML のマージ

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

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

最短パス

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

次のステップ