Sdílet prostřednictvím


Příklad schématu GQL: Sociální síť

Poznámka:

Tato funkce je aktuálně ve verzi Public Preview. Tato verze Preview se poskytuje bez smlouvy o úrovni služeb a nedoporučuje se pro produkční úlohy. Některé funkce nemusí být podporované nebo můžou mít omezené možnosti. Další informace najdete v dodatečných podmínkách použití pro verze Preview v Microsoft Azure.

Tento článek obsahuje úplnou technickou specifikaci pro typ grafu sociální sítě, který se používá v dokumentaci GQL. Toto schéma ukazuje mnoho běžných funkcí složitých grafů a slouží jako základ pro všechny příklady dotazů v dokumentaci jazyka GQL.

Poznámka:

Příkladem sociální sítě je LDBC SNB (LDBC Social Network Benchmark) publikovaný GDC (Graph Data Council). Další podrobnosti najdete v článku Srovnávací test sociální sítě LDBC . Viz příkladová datasada grafů sociálních sítí , kde najdete způsob, jak získat kopii odvozené datové sady.

Diagram znázorňující schéma sociální sítě

Specifikace domény

Doména sociální sítě modeluje komplexní sociální platformu s následujícími entitami:

  • Lidé s demografickými a behaviorálními vlastnostmi
  • Organizace včetně vzdělávacích institucí (univerzit) a zaměstnavatelů (společností)
  • Geografická hierarchie z měst přes země/oblasti do kontinentů
  • Systém obsahu s fóry, příspěvky a komentáři s vlákny
  • Systém taxonomie se značkami a klasifikacemi značek
  • Sociální a profesní vztahy mezi lidmi a organizacemi

Podrobnější úvod do entit této domény najdete v průvodci jazykem GQL.

Ukázkové funkce schématu

Tento typ grafu předvádí pokročilé funkce GQL:

  • Dědičnost typu uzlu pomocí abstraktních základních typů (Message, Organization, Place)
  • Více vzorů dědičnosti s definicemi sdílených vlastností
  • Rodiny typů hraničních zařízení, kde stejný popisek vztahu spojuje různé kombinace typů uzlů
  • Komplexní systém omezení zajišťující integritu dat prostřednictvím klíčových omezení
  • Vzory smíšených vztahů , včetně hierarchických omezení, sociálních propojení a interakcí s obsahem

Úplná definice schématu

Následující typ grafu poskytuje úplnou definici schématu v syntaxi 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)

Analýza schématu

Hierarchie typů uzlů

Schéma definuje tři hierarchie dědičnosti:

Geografická hierarchie:

  • Place (abstraktní) → City, Country, Continent

Organizační hierarchie:

  • Organization (abstraktní) → University, Company

Hierarchie obsahu:

  • Message (abstraktní) → Post, Comment

Rodiny typů hraničních zařízení

Několik okrajových popisků typů formulářů propojujících různé kombinace uzlů:

Relace umístění (isPartOf):

  • Města patří do zemí/oblastí: (:City)-[:isPartOf]->(:Country)
  • Země/oblasti patří do kontinentů: (:Country)-[:isPartOf]->(:Continent)

Interakce obsahu (likes):

  • Lidé, jako jsou příspěvky: (:Person)-[:likes]->(:Post)
  • Lidé, jako jsou komentáře: (:Person)-[:likes]->(:Comment)
  • Lidé, jako jsou zprávy: (:Person)-[:likes]->(<:Message)

Zeměpisné umístění (isLocatedIn):

  • Lidé žijí ve městech: (:Person)-[:isLocatedIn]->(:City)
  • Univerzity umístěné ve městech: (:University)-[:isLocatedIn]->(:City)
  • Společnosti umístěné v zemích/oblastech: (:Company)-[:isLocatedIn]->(:Country)
  • Příspěvky umístěné v zemích/regionech: (:Post)-[:isLocatedIn]->(:Country)
  • Komentáře umístěné v zemích/regionech: (:Comment)-[:isLocatedIn]->(:Country)

Klíčová omezení

Každý typ uzlu má odpovídající omezení klíče, které zajišťuje jedinečnou identifikaci podle id vlastnosti:

  • tag_class_pk, tag_pk, place_pk, organization_pk, person_pk, , forum_pkmessage_pk