注
現在、この機能はパブリック プレビュー段階にあります。 このプレビュー版はサービス レベル アグリーメントなしで提供されています。運用環境のワークロードに使用することはお勧めできません。 特定の機能はサポート対象ではなく、機能が制限されることがあります。 詳細については、「 Microsoft Azure プレビューの追加使用条件」を参照してください。
この記事では、GQL ドキュメント全体で使用されるソーシャル ネットワーク グラフの種類の完全な技術仕様について説明します。 このスキーマは、複雑なグラフの多くの一般的な機能を示し、GQL 言語ドキュメントのすべてのクエリ例の基礎として機能します。
注
ソーシャル ネットワークは、GDC (Graph Data Council) によって発行された LDBC SNB (LDBC ソーシャル ネットワーク ベンチマーク) から派生した例です。 詳細については、「 LDBC ソーシャル ネットワーク ベンチマーク」 の記事を参照してください。 派生データセットのコピーを取得する方法は、 ソーシャルネットワークのグラフサンプルデータセット を参照してください。
ドメインの仕様
ソーシャル ネットワーク ドメインは、次のエンティティを持つ包括的なソーシャル プラットフォームをモデル化します。
- 人口統計と行動特性を持つユーザー
- 教育機関 (大学) および雇用主 (企業) を含む組織
- 都市から国/地域、大陸までの地理的階層
- フォーラム、投稿、スレッド化されたコメントを含むコンテンツ システム
- タグとタグ分類を使用した分類システム
- 人と組織の間の社会的および専門的な関係
このドメインのエンティティの詳細な概要については、 GQL 言語ガイドを参照してください。
スキーマ機能のデモ
このグラフの種類では、高度な GQL 機能が紹介されています。
- 抽象基本型 (、
Message、Organization) を使用したPlace - 共有プロパティ定義を使用した複数の継承パターン
- 同じリレーションシップ ラベルが異なるノード タイプの組み合わせを接続するエッジ タイプ ファミリ
- キー制約によってデータの整合性を確保する包括的な制約システム
- 階層的包含、ソーシャル接続、コンテンツの相互作用を含む混合リレーションシップ パターン
完全なスキーマ定義
次の グラフの種類 は、GQL 構文での完全なスキーマ定義を提供します。
(:TagClass => { id :: UINT64 NOT NULL, name :: STRING, url :: STRING }),
CONSTRAINT tag_class_pk
FOR (n:TagClass) REQUIRE (n.id) IS KEY,
(:TagClass)-[:isSubclassOf]->(:TagClass),
(:Tag => { id :: UINT64 NOT NULL, name :: STRING, url :: STRING }),
(:Tag)-[:hasType]->(:TagClass),
CONSTRAINT tag_pk
FOR (n:Tag) REQUIRE (n.id) IS KEY,
ABSTRACT
(:Place => { id :: UINT64 NOT NULL, name :: STRING, url :: STRING }),
(:City => :Place),
(:Country => :Place),
(:Continent => :Place),
CONSTRAINT place_pk
FOR (n:Place) REQUIRE (n.id) IS KEY,
(:City)-[:isPartOf]->(:Country),
(:Country)-[:isPartOf]->(:Continent),
ABSTRACT
(:Organization => { id :: UINT64 NOT NULL, name :: STRING, url :: STRING }),
(:University => :Organization),
(:Company => :Organization),
CONSTRAINT organization_pk
FOR (n:Organization) REQUIRE (n.id) IS KEY,
(:University)-[:isLocatedIn]->(:City),
(:Company)-[:isLocatedIn]->(:Country),
(:Person => {
id :: UINT64 NOT NULL,
creationDate :: ZONED DATETIME,
firstName :: STRING,
lastName :: STRING,
gender :: STRING,
birthday :: UINT64,
browserUsed :: STRING,
locationIP :: STRING
}),
CONSTRAINT person_pk
FOR (n:Person) REQUIRE (n.id) IS KEY,
(:Person)-[:hasInterest]->(:Tag),
(:Person)-[:isLocatedIn]->(:City),
(:Person)-[:studyAt { classYear :: UINT64 }]->(:University),
(:Person)-[:workAt { workFrom :: UINT64 }]->(:Company),
(:Person)-[:knows { creationDate :: ZONED DATETIME }]->(:Person),
(:Forum => {
id :: UINT64 NOT NULL,
creationDate :: ZONED DATETIME,
title :: STRING
}),
CONSTRAINT forum_pk
FOR (n:Forum) REQUIRE (n.id) IS KEY,
(:Forum)-[:hasTag]->(:Tag),
(:Forum)-[:hasMember { creationDate :: ZONED DATETIME, joinDate :: UINT64 }]->(:Person),
(:Forum)-[:hasModerator]->(:Person),
ABSTRACT (:Message => {
id :: UINT64 NOT NULL,
creationDate :: ZONED DATETIME,
browserUsed :: STRING,
locationIP :: STRING,
content :: STRING,
length :: UINT64
}),
CONSTRAINT message_pk
FOR (n:Message) REQUIRE (n.id) IS KEY,
(:Post => :Message += {
language :: STRING,
imageFile :: STRING
}),
(:Person)-[:likes { creationDate :: ZONED DATETIME }]->(:Post),
(:Post)-[:hasCreator]->(:Person),
(:Post)-[:isLocatedIn]->(:Country),
(:Forum)-[:containerOf]->(:Post),
(:Comment => :Message),
(:Person)-[:likes { creationDate :: ZONED DATETIME }]->(:Comment),
(:Comment)-[:hasCreator]->(:Person),
(:Comment)-[:isLocatedIn]->(:Country),
(:Comment)-[:replyOf]->(<:Message),
(:Person)-[:likes { creationDate :: ZONED DATETIME }]->(<:Message),
(<:Message)-[:hasCreator]->(:Person),
(<:Message)-[:isLocatedIn]->(:Country),
(<:Message)-[:hasTag]->(:Tag)
スキーマ分析
ノードの種類の階層
スキーマでは、次の 3 つの継承階層が定義されています。
地理的階層:
-
Place(抽象) →City、Country、Continent
組織階層:
-
Organization(抽象) →University、Company
コンテンツ階層:
-
Message(抽象) →Post、Comment
エッジ タイプ ファミリ
複数のエッジ ラベルは、異なるノードの組み合わせを接続するタイプ ファミリを形成します。
場所のリレーションシップ (isPartOf):
- 都市は国/地域に属します。
(:City)-[:isPartOf]->(:Country) - 国/地域は大陸に属しています。
(:Country)-[:isPartOf]->(:Continent)
コンテンツ操作 (likes):
- 投稿が好きな人:
(:Person)-[:likes]->(:Post) - コメントが好きな人:
(:Person)-[:likes]->(:Comment) - メッセージが好きな人:
(:Person)-[:likes]->(<:Message)
地理的な場所 (isLocatedIn):
- 都市に住む人々:
(:Person)-[:isLocatedIn]->(:City) - 都市にある大学:
(:University)-[:isLocatedIn]->(:City) - 国/地域に所在する企業:
(:Company)-[:isLocatedIn]->(:Country) - 国・地域にあるポスト:
(:Post)-[:isLocatedIn]->(:Country) - 国・地域ごとのコメント:
(:Comment)-[:isLocatedIn]->(:Country)
キー制約
すべてのノード の種類には、対応するキー制約があり、 id プロパティによる一意の識別が保証されます。
-
tag_class_pk、tag_pk、place_pk、organization_pk、person_pk、forum_pk、message_pk