次の方法で共有


GQL スキーマの例: ソーシャル ネットワーク

現在、この機能はパブリック プレビュー段階にあります。 このプレビュー版はサービス レベル アグリーメントなしで提供されています。運用環境のワークロードに使用することはお勧めできません。 特定の機能はサポート対象ではなく、機能が制限されることがあります。 詳細については、「 Microsoft Azure プレビューの追加使用条件」を参照してください。

この記事では、GQL ドキュメント全体で使用されるソーシャル ネットワーク グラフの種類の完全な技術仕様について説明します。 このスキーマは、複雑なグラフの多くの一般的な機能を示し、GQL 言語ドキュメントのすべてのクエリ例の基礎として機能します。

ソーシャル ネットワークは、GDC (Graph Data Council) によって発行された LDBC SNB (LDBC ソーシャル ネットワーク ベンチマーク) から派生した例です。 詳細については、「 LDBC ソーシャル ネットワーク ベンチマーク」 の記事を参照してください。 派生データセットのコピーを取得する方法は、 ソーシャルネットワークのグラフサンプルデータセット を参照してください。

ソーシャル ネットワーク スキーマを示す図。

ドメインの仕様

ソーシャル ネットワーク ドメインは、次のエンティティを持つ包括的なソーシャル プラットフォームをモデル化します。

  • 人口統計と行動特性を持つユーザー
  • 教育機関 (大学) および雇用主 (企業) を含む組織
  • 都市から国/地域、大陸までの地理的階層
  • フォーラム、投稿、スレッド化されたコメントを含むコンテンツ システム
  • タグとタグ分類を使用した分類システム
  • 人と組織の間の社会的および専門的な関係

このドメインのエンティティの詳細な概要については、 GQL 言語ガイドを参照してください。

スキーマ機能のデモ

このグラフの種類では、高度な GQL 機能が紹介されています。

  • 抽象基本型 (MessageOrganization) を使用した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 (抽象) → CityCountryContinent

組織階層:

  • Organization (抽象) → UniversityCompany

コンテンツ階層:

  • Message (抽象) → PostComment

エッジ タイプ ファミリ

複数のエッジ ラベルは、異なるノードの組み合わせを接続するタイプ ファミリを形成します。

場所のリレーションシップ (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_pktag_pkplace_pkorganization_pkperson_pkforum_pkmessage_pk