Del via


EKSEMPEL på GQL-skjema: Sosialt nettverk

Note

Denne funksjonen er for øyeblikket i offentlig forhåndsversjon. Denne forhåndsvisningen leveres uten en tjenesteavtale, og anbefales ikke for produksjonsarbeidsbelastninger. Enkelte funksjoner støttes kanskje ikke eller kan ha begrensede funksjoner. Hvis du vil ha mer informasjon, kan du se Supplerende vilkår for bruk for Microsoft Azure Previews.

Denne artikkelen inneholder den fullstendige tekniske spesifikasjonen for den sosiale nettverksgraftypen som brukes i GQL-dokumentasjonen. Dette skjemaet demonstrerer mange vanlige funksjoner i komplekse grafer og fungerer som grunnlaget for alle spørringseksempler i dokumentasjonen for GQL-språk.

Note

Det sosiale nettverket er eksempel er avledet fra LDBC SNB (LDBC Social Network Benchmark) publisert av GDC (Graph Data Council). Se artikkelen "LDBC Social Network Benchmark" for mer informasjon. Se eksempel på grafdatasett for sosiale nettverk for hvordan du får tak i en kopi av det utledede datasettet.

Diagram som viser det sosiale nettverksskjemaet.

Domenespesifikasjon

Det sosiale nettverksdomenet modellerer en omfattende sosial plattform med følgende enheter:

  • Personer med demografiske egenskaper og atferdsegenskaper
  • Organisasjoner inkludert utdanningsinstitusjoner (universiteter) og arbeidsgivere (bedrifter)
  • Geografisk hierarki fra byer gjennom land/områder til kontinenter
  • Innholdssystem med fora, innlegg og kommentartråder
  • Taksonomisystem med koder og kodeklassifiseringer
  • Sosiale og profesjonelle relasjoner mellom personer og organisasjoner

Hvis du vil ha en mer detaljert innføring i enhetene i dette domenet, kan du se GQL-språkveiledning.

Skjemafunksjoner demonstrert

Denne graftypen viser avanserte GQL-funksjoner:

  • Nodetypearv ved hjelp av abstrakte basistyper (Message, Organization, Place)
  • Flere arvemønstre med delte egenskapsdefinisjoner
  • Edge-type familier der samme relasjonsetikett kobler sammen ulike kombinasjoner av nodetype
  • Omfattende begrensningssystem som sikrer dataintegritet gjennom viktige begrensninger
  • Blandede relasjonsmønstre , inkludert hierarkisk innesperring, sosiale forbindelser og samhandlinger mellom innhold

Fullfør skjemadefinisjon

Følgende graftype gir en fullstendig skjemadefinisjon i GQL-syntaks:

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

Skjemaanalyse

Nodetypehierarki

Skjemaet definerer tre arvehierarkier:

Geografisk hierarki:

  • Place(abstrakt) → City, , CountryContinent

Organisasjonshierarki:

  • Organization (abstrakt) → University, Company

Innholdshierarki:

  • Message (abstrakt) → Post, Comment

Edge-type familier

Flere kantetiketter skjematype familier som forbinder ulike nodekombinasjoner:

Plasseringsrelasjoner (isPartOf):

  • Byer tilhører land/områder: (:City)-[:isPartOf]->(:Country)
  • Land/områder tilhører kontinenter: (:Country)-[:isPartOf]->(:Continent)

Innholdssamhandlinger (likes):

  • Personer liker innlegg: (:Person)-[:likes]->(:Post)
  • Personer liker kommentarer: (:Person)-[:likes]->(:Comment)
  • Personer liker meldinger: (:Person)-[:likes]->(<:Message)

Geografisk plassering (isLocatedIn):

  • Folk bor i byer: (:Person)-[:isLocatedIn]->(:City)
  • Universiteter i byer: (:University)-[:isLocatedIn]->(:City)
  • Selskaper som befinner seg i land/områder: (:Company)-[:isLocatedIn]->(:Country)
  • Stillinger plassert i land/regioner: (:Post)-[:isLocatedIn]->(:Country)
  • Kommentarer plassert i land/regioner: (:Comment)-[:isLocatedIn]->(:Country)

Nøkkelbetingelser

Hver nodetype har en tilsvarende nøkkelbetingelse som sikrer unik identifikasjon etter id egenskap:

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