共用方式為


GQL 結構描述範例:社交網路

備註

這項功能目前處於公開預覽狀態。 此預覽版是在沒有服務等級協定的情況下提供,不建議用於生產工作負載。 可能不支援特定功能,或可能已經限制功能。 如需詳細資訊,請參閱 Microsoft Azure 預覽版增補使用條款

本文提供整個 GQL 文件中使用的社交網路圖形型別的完整技術規格。 此結構描述展示了複雜圖形的許多常見功能,並作為 GQL 語言文件中所有查詢範例的基礎。

備註

社交網絡的例子源自 GDC(圖數據委員會)發布的 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)

綱目分析

節點類型階層

結構描述定義了三個繼承階層:

地理層次:

  • 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