6.1 PGQLを使用したプロパティ・グラフの作成
CREATE PROPERTY GRAPHは、データベース表からグラフを作成するPGQL DDL文です。グラフはプロパティ・グラフ・スキーマに格納されます。
CREATE PROPERTY GRAPH文は、グラフに付ける名前で始まり、その後に頂点表とエッジ表のセットが続きます。グラフには、頂点表またはエッジ表がない(空のグラフ)か、頂点表がありエッジ表はない(頂点のみでエッジなしのグラフ)か、頂点表とエッジ表の両方がある(頂点とエッジのあるグラフ)場合があります。ただし、エッジ表のみで頂点表のないグラフは指定できません。
次のケースについて検討します。
- PERSONSは、ID列、NAME列およびACCOUNT_NUMBER列がある表です。この表には、アカウントを持つすべての人の行が追加されます。
- TRANSACTIONSは、FROM_ACCOUNT列、TO_ACCOUNT列、DATE列、AMOUNT列がある表です。FROM_ACCOUNTからTO_ACCOUNTに送金されるたびに、データベース内のこの表に行が追加されます。
表からグラフへの簡単なマッピングは次のようになります。マップされたグラフの概念は、頂点、エッジ、ラベル、プロパティです。
- 頂点表: データ・エンティティを含む表は頂点表です。
- 頂点表の各行は頂点です。
- 頂点表の列は、頂点のプロパティです。
- 頂点表の名前は、この頂点セットのデフォルト・ラベルです。あるいは、CREATE PROPERTY GRAPH文の一部としてラベル名を指定できます。
- エッジ表: エッジ表は、2つの頂点表をリンクする任意の表、またはソース・エンティティからターゲット・エンティティへのアクションを示すデータを含む表です。たとえば、FROM_ACCOUNTからTO_ACCOUNTへの送金は自然なエッジです。
- 外部キー関係により、データ内で関連しているリンクを知ることができます。CREATE PROPERTY GRAPHは、デフォルトで外部キー関係を使用してエッジを識別します。
- エッジ表のプロパティの一部は、エッジのプロパティにできます。たとえば、FROM_ACCOUNTからTO_ACCOUNTへのエッジには、DATEおよびAMOUNTプロパティを指定できます。
- エッジ表の名前は、このエッジ・セットのデフォルト・ラベルです。あるいは、CREATE PROPERTY GRAPH文の一部としてラベル名を指定できます。
- キー:
- 頂点表のキー: 頂点表のキーは、グラフ内の一意の頂点を識別します。キーはCREATE PROPERTY GRAPH文で指定できます。指定しない場合、デフォルトで表の主キーになります。表に重複した行がある場合は、CREATE PROPERTY GRAPH文によってエラーが返されます。
- エッジ表のキー: エッジ表のキーは、グラフ内のエッジを一意に識別します。ソースと宛先の頂点を指定すると、KEY句はソースと宛先の頂点を一意に識別します。
次に、PERSONS表とTRANSACTIONS表のCREATE PROPERTY GRAPH文の例を示します。
CREATE PROPERTY GRAPH bank_transfers VERTEX TABLES (persons KEY(account_number)) EDGE TABLES( transactions KEY (from_acct, to_acct, date, amount) SOURCE KEY (from_account) REFERENCES persons DESTINATION KEY (to_account) REFERENCES persons PROPERTIES (date, amount) )
- 表の別名: 頂点表とエッジ表には一意の名前が付いている必要があります。同じリレーショナル表から複数の頂点表を識別したり、同じリレーショナル表から複数のエッジ表を識別する必要がある場合は、別名を使用する必要があります。たとえば、次の例に示すように、1つの表PERSONSから2つの頂点表PERSONSとPERSONS_IDを作成できます。
CREATE PROPERTY GRAPH bank_transfers VERTEX TABLES (persons KEY(account_number) persons_id AS persons KEY(id))
- REFERENCES句: エッジのソースおよび宛先の頂点を、対応する頂点表に接続します。
詳細は、https://pgql-lang.org/spec/latest/#creating-a-property-graphを参照してください。
親トピック: プロパティ・グラフ問合せ言語(PGQL)