Dela via


GQL-schemaexempel: Socialt nätverk

Anmärkning

Den här funktionen är för närvarande i offentlig förhandsversion. Den här förhandsversionen tillhandahålls utan ett serviceavtal och rekommenderas inte för produktionsarbetsbelastningar. Vissa funktioner kanske inte stöds eller kan vara begränsade. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.

Den här artikeln innehåller den fullständiga tekniska specifikationen för graftypen för sociala nätverk som används i GQL-dokumentationen. Det här schemat visar många vanliga funktioner i komplexa grafer och fungerar som grund för alla frågeexempel i GQL-språkdokumentationen.

Anmärkning

Det sociala nätverket är ett exempel som härleds från LDBC SNB (LDBC Social Network Benchmark) som publicerats av GDC (Graph Data Council). Mer information finns i artikeln "LDBC Social Network Benchmark" . Se exempel på grafdataset för sociala nätverk för hur man får tag på en kopia av den härledda datamängden.

Diagram som visar schemat för det sociala nätverket.

Domänspecifikation

Domänen för sociala nätverk modellerar en omfattande social plattform med följande entiteter:

  • Personer med demografiska och beteendemässiga egenskaper
  • Organisationer inklusive utbildningsinstitutioner (universitet) och arbetsgivare (företag)
  • Geografisk hierarki från städer via länder/regioner till kontinenter
  • Innehållssystem med forum, inlägg och trådade kommentarer
  • Taxonomisystem med taggar och taggklassificeringar
  • Sociala och professionella relationer mellan människor och organisationer

En mer detaljerad introduktion till entiteterna i den här domänen finns i GQL-språkguiden.

Schemafunktioner demonstrerade

Den här graftypen visar avancerade GQL-funktioner:

  • Arv av nodtyp med abstrakta bastyper (Message, Organization, Place)
  • Flera arvsmönster med definitioner för delad egenskap
  • Edge-typfamiljer där samma relationsetikett ansluter olika kombinationer av nodtyper
  • Omfattande begränsningssystem som säkerställer dataintegritet genom viktiga begränsningar
  • Blandade relationsmönster , inklusive hierarkisk inneslutning, sociala anslutningar och innehållsinteraktioner

Fullständig schemadefinition

Följande diagramtyp innehåller en fullständig schemadefinition i GQL-syntaxen:

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

Schemaanalys

Hierarki för nodtyp

Schemat definierar tre arvshierarkier:

Geografisk hierarki:

  • Place(abstrakt) → City, , CountryContinent

Organisationshierarki:

  • Organization (abstrakt) → University, Company

Innehållshierarki:

  • Message (abstrakt) → Post, Comment

Kanttypfamiljer

Flera kantetiketter bildar familjer som ansluter olika nodkombinationer:

Platsrelationer (isPartOf):

  • Städer tillhör länder/regioner: (:City)-[:isPartOf]->(:Country)
  • Länder/regioner tillhör kontinenter: (:Country)-[:isPartOf]->(:Continent)

Innehållsinteraktioner (likes):

  • Personer gillar inlägg: (:Person)-[:likes]->(:Post)
  • Personer gillar kommentarer: (:Person)-[:likes]->(:Comment)
  • Personer gillar meddelanden: (:Person)-[:likes]->(<:Message)

Geografisk plats (isLocatedIn):

  • Människor bor i städer: (:Person)-[:isLocatedIn]->(:City)
  • Universitet i städer: (:University)-[:isLocatedIn]->(:City)
  • Företag i länder/regioner: (:Company)-[:isLocatedIn]->(:Country)
  • Inlägg placerade i länder/regioner: (:Post)-[:isLocatedIn]->(:Country)
  • Kommentarer placerade i länder/regioner: (:Comment)-[:isLocatedIn]->(:Country)

Viktiga begränsningar

Varje nodtyp har en motsvarande nyckelbegränsning som garanterar unik identifiering efter id egenskap:

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