Megosztás:


GQL-séma példa: Közösségi hálózat

Megjegyzés:

Ez a funkció jelenleg nyilvános előzetes verzióban érhető el. Ez az előzetes verzió szolgáltatásszintű szerződés nélkül érhető el, és éles számítási feladatokhoz nem ajánlott. Előfordulhat, hogy bizonyos funkciók nem támogatottak, vagy korlátozott képességekkel rendelkeznek. További információkért lásd: Microsoft Azure Previews Kiegészítő Felhasználási Feltételek.

Ez a cikk a GQL dokumentációjában használt közösségi hálózati gráftípus teljes műszaki specifikációját tartalmazza. Ez a séma az összetett gráfok számos gyakori funkcióját mutatja be, és a GQL nyelvi dokumentációjában szereplő összes lekérdezési példa alapjául szolgál.

Megjegyzés:

A közösségi hálózat például a GDC (Graph Data Council) által közzétett LDBC SNB -ből (LDBC Social Network Benchmark) származik. További részletekért lásd a "The LDBC Social Network Benchmark" (Az LDBC közösségi hálózati teljesítményteszt) című cikket. Lásd a közösségi hálózat példa gráfdataset-et , hogy hogyan szerezhetsz másolatot a származtatott adathalmazból.

A közösségi hálózati sémát bemutató ábra.

Tartomány specifikációja

A közösségi hálózat tartománya egy átfogó közösségi platformot modellez az alábbi entitásokkal:

  • Demográfiai és viselkedési tulajdonságokkal rendelkező személyek
  • Oktatási intézményeket (egyetemeket ) és munkáltatókat (vállalatokat) is beleértve
  • Földrajzi hierarchia városoktól országokon/régiókon át kontinensekig
  • Tartalomrendszer fórumokkal, bejegyzésekkel és szálas megjegyzésekkel
  • Osztályozási rendszer címkékkel és címkebesorolásokkal
  • Emberek és szervezetek közötti társadalmi és szakmai kapcsolatok

A tartomány entitásainak részletesebb ismertetését a GQL nyelvi útmutatójában találja.

A bemutatott sémafunkciók

Ez a gráftípus speciális GQL-képességeket mutat be:

  • Csomóponttípus-öröklés absztrakt alaptípusokkal (Message, Organization, Place)
  • Több öröklési minta megosztott tulajdonságdefiníciókkal
  • Peremhálózati típuscsaládok , ahol ugyanaz a kapcsolatcímke különböző csomóponttípus-kombinációkat kapcsol össze
  • Az adatintegritást kulcskorlátozásokkal biztosító átfogó kényszerrendszer
  • Vegyes kapcsolati minták, beleértve a hierarchikus elszigetelést, a közösségi kapcsolatokat és a tartalom interakcióit

Sémadefiníció befejezése

A következő gráftípus teljes sémadefiníciót biztosít a GQL szintaxisában:

(: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)

Sémaelemzés

Csomóponttípus-hierarchia

A séma három öröklési hierarchiát határoz meg:

Földrajzi hierarchia:

  • Place(absztrakt) → City, CountryContinent

Szervezeti hierarchia:

  • Organization (absztrakt) → University, Company

Tartalomhierarchia:

  • Message (absztrakt) → Post, Comment

Peremhálózat-típuscsaládok

Több élfelirat típuscsaládja különböző csomópontkombinációkat köt össze:

Helykapcsolatok (isPartOf):

  • A városok országokhoz/régiókhoz tartoznak: (:City)-[:isPartOf]->(:Country)
  • Az országok/régiók kontinensekhez tartoznak: (:Country)-[:isPartOf]->(:Continent)

Tartalom-interakciók (likes):

  • A bejegyzéseket kedvelő személyek: (:Person)-[:likes]->(:Post)
  • A felhasználók szeretik a megjegyzéseket: (:Person)-[:likes]->(:Comment)
  • A felhasználók szeretik az üzeneteket: (:Person)-[:likes]->(<:Message)

Földrajzi hely (isLocatedIn):

  • Az emberek városokban élnek: (:Person)-[:isLocatedIn]->(:City)
  • Városokban található egyetemek: (:University)-[:isLocatedIn]->(:City)
  • Országokban/régiókban található vállalatok: (:Company)-[:isLocatedIn]->(:Country)
  • Országokban/régiókban található posztok: (:Post)-[:isLocatedIn]->(:Country)
  • Hozzászólások országokban/régiókban: (:Comment)-[:isLocatedIn]->(:Country)

Fő megkötések

Minden csomóponttípus rendelkezik egy megfelelő kulcskényszerrel, amely tulajdonságonként egyedi azonosítást id biztosít:

  • tag_class_pk, tag_pk, place_pk, organization_pkperson_pk, forum_pkmessage_pk