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 Supplemental Terms of Use for Microsoft Azure Previews.

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

Exemplet på sociala nätverk härleds från LDBC SNB (LDBC Social Network Benchmark) som publicerats av GDC (Graph Data Council).

Mer information finns i artikeln "The LDBC Social Network Benchmark". Information om hur du hämtar en kopia av den härledda datamängden finns i diagramdatauppsättningen för sociala nätverksexempel.

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