Delen via


GQL-schemavoorbeeld: Sociaal netwerk

Opmerking

Deze functie is momenteel beschikbaar als openbare preview-versie. Deze preview wordt geleverd zonder een service level agreement en wordt niet aanbevolen voor productieworkloads. Bepaalde functies worden mogelijk niet ondersteund of hebben mogelijk beperkte mogelijkheden. Voor meer informatie, zie Aanvullende Gebruiksvoorwaarden voor Microsoft Azure Previews.

Dit artikel bevat de volledige technische specificatie voor het grafiektype voor sociale netwerken dat in de GQL-documentatie wordt gebruikt. Dit schema demonstreert veel algemene functies van complexe grafieken en fungeert als de basis voor alle queryvoorbeelden in de GQL-taaldocumentatie.

Opmerking

Het sociale netwerk is een voorbeeld dat is afgeleid van de LDBC SNB (LDBC Social Network Benchmark) die is gepubliceerd door de GDC (Graph Data Council). Zie het artikel 'The LDBC Social Network Benchmark' voor meer informatie. Zie een voorbeeld van een sociale netwerkgrafiek dataset voor hoe je een kopie van de afgeleide dataset kunt verkrijgen.

Diagram met het schema van het sociale netwerk.

Domeinspecificatie

Het sociale netwerkdomein modelleerde een uitgebreid sociaal platform met de volgende entiteiten:

  • Personen met demografische en gedragseigenschappen
  • Organisaties , waaronder onderwijsinstellingen (universiteiten) en werkgevers (bedrijven)
  • Geografische hiërarchie van steden via landen/regio's naar continenten
  • Inhoudssysteem met forums, berichten en discussielijnen in opmerkingen
  • Taxonomiesysteem met tags en tagclassificaties
  • Sociale en professionele relaties tussen mensen en organisaties

Zie de GQL-taalhandleiding voor een gedetailleerdere inleiding tot de entiteiten van dit domein.

Schemafuncties gedemonstreerd

Dit grafiektype toont geavanceerde GQL-mogelijkheden:

  • Overname van knooppunttypen met abstracte basistypen (Message, Organization, Place)
  • Meerdere overnamepatronen met definities van gedeelde eigenschappen
  • Edge-typefamilies waarbij hetzelfde relatielabel verschillende combinaties van knooppunttypen verbindt
  • Uitgebreid beperkingssysteem dat de gegevensintegriteit garandeert via belangrijke beperkingen
  • Gemengde relatiepatronen , waaronder hiërarchische insluiting, sociale verbindingen en interacties met inhoud

Volledige schemadefinitie

Het volgende grafiektype biedt een volledige schemadefinitie in GQL-syntaxis:

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

Schemaanalyse

Hiërarchie van knooppunttype

Het schema definieert drie overnamehiërarchieën:

Geografische hiërarchie:

  • Place(abstract) → City, CountryContinent

Organisatiehiërarchie:

  • Organization (abstract) → University, Company

Inhoudshiërarchie:

  • Message (abstract) → Post, Comment

Edge-typefamilies

Verschillende randlabels vormenfamilies waarmee verschillende knooppuntcombinaties worden verbonden:

Locatierelaties (isPartOf):

  • Steden behoren tot landen/regio's: (:City)-[:isPartOf]->(:Country)
  • Landen/regio's behoren tot continenten: (:Country)-[:isPartOf]->(:Continent)

Inhoudsinteracties (likes):

  • Personen zoals berichten: (:Person)-[:likes]->(:Post)
  • Personen zoals opmerkingen: (:Person)-[:likes]->(:Comment)
  • Personen zoals berichten: (:Person)-[:likes]->(<:Message)

Geografische locatie (isLocatedIn):

  • Mensen wonen in steden: (:Person)-[:isLocatedIn]->(:City)
  • Universiteiten in steden: (:University)-[:isLocatedIn]->(:City)
  • Bedrijven die zich in landen/regio's bevinden: (:Company)-[:isLocatedIn]->(:Country)
  • Berichten in landen/regio's: (:Post)-[:isLocatedIn]->(:Country)
  • Reacties geplaatst in landen/regio's: (:Comment)-[:isLocatedIn]->(:Country)

Belangrijke beperkingen

Elk knooppunttype heeft een bijbehorende sleutelbeperking die zorgt voor unieke identificatie per id eigenschap:

  • tag_class_pk, , tag_pkplace_pk, organization_pk, , person_pk, , forum_pkmessage_pk