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

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

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

グラフ データベースとは

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

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

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

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

  • アプリケーションには階層データがあります。 HierarchyID データ型を使用して階層を実装できますが、いくつかの制限があります。 たとえば、ノードに対して複数の親を格納することはできません。
  • アプリケーションには複雑な多対多リレーションシップがあります。アプリケーションの進化に伴い、新しいリレーションシップが追加されます。
  • 相互接続されたデータとリレーションシップを分析する必要があります。

SQL Server 2017 (14.x) で導入されたグラフ機能

グラフ データの格納とクエリを容易にするために、グラフ拡張機能をSQL Serverに追加し始めます。 最初のリリースでは、次の機能が導入されています。

グラフ オブジェクトを作成する

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 アート スタイルの構文を使用します。 次に例を示します。

-- 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 および SQL Server vNext でサポートされるようになりました。 つまり、現在のグラフ データ (ノードまたはエッジ テーブル) を、MATCH 述語を使用して新しいデータとマージし、個別の INSERT/UPDATE/DELETE ステートメントではなく、単一のステートメントでグラフリレーションシップを指定できるようになりました。

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

最短パス

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

次のステップ

SQL Graph データベースの読み取り - アーキテクチャ