Condividi tramite


Esempio di schema GQL: Social network

Annotazioni

Questa funzionalità è attualmente disponibile in anteprima pubblica. Questa anteprima viene messa a disposizione senza contratto di servizio e non è consigliata per i carichi di lavoro di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero presentare funzionalità limitate. Per altre informazioni, vedere Condizioni per l'utilizzo Microsoft Azure anteprime.

Questo articolo fornisce la specifica tecnica completa per il tipo di grafo di social network usato nella documentazione di GQL. Questo schema illustra molte funzionalità comuni di grafici complessi e funge da base per tutti gli esempi di query nella documentazione del linguaggio GQL.

Annotazioni

L'esempio di social network deriva dal LDBC SNB (LDBC Social Network Benchmark) pubblicato dal GDC (Graph Data Council).

Per altre informazioni, vedere l'articolo "The LDBC Social Network Benchmark". Per informazioni su come ottenere una copia del set di dati derivato, vedere set di dati del grafo di esempio di social network.

Diagramma che mostra lo schema del social network.

Specifica del dominio

Il dominio di social network modella una piattaforma social completa con le entità seguenti:

  • Persone con proprietà demografiche e comportamentali
  • Organizzazioni che includono istituti di istruzione (università) e datori di lavoro (aziende)
  • Gerarchia geografica dalle città attraverso paesi/aree geografiche a continenti
  • Sistema di contenuti con forum, post e commenti a thread
  • Sistema di tassonomia con tag e classificazioni di tag
  • Relazioni sociali e professionali tra persone e organizzazioni

Per un'introduzione più dettagliata alle entità di questo dominio, vedere guida al linguaggio GQL.

Funzionalità dello schema illustrate

Questo tipo di grafo presenta funzionalità GQL avanzate:

  • Ereditarietà dei tipi di nodo usando tipi di base astratti (Message, Organization, Place)
  • Più modelli di ereditarietà con definizioni di proprietà condivise
  • Famiglie di tipi di arco in cui la stessa etichetta di relazione connette diverse combinazioni di tipi di nodo
  • Sistema di vincoli completo che garantisce l'integrità dei dati tramite vincoli chiave
  • Modelli di relazione mista , tra cui contenimento gerarchico, connessioni sociali e interazioni tra contenuti

Definizione completa dello schema

Il tipo di grafico seguente fornisce una definizione completa dello schema nella sintassi 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)

Analisi dello schema

Gerarchia dei tipi di nodo

Lo schema definisce tre gerarchie di ereditarietà:

Gerarchia geografica:

  • Place(abstract) → City, , CountryContinent

Gerarchia organizzativa:

  • Organization (abstract) → University, Company

Gerarchia del contenuto:

  • Message (abstract) → Post, Comment

Famiglie di tipi di arco

Diverse famiglie di tipi di modulo etichette perimetrali che connettono diverse combinazioni di nodi:

Relazioni di posizione (isPartOf):

  • Le città appartengono a paesi/aree geografiche: (:City)-[:isPartOf]->(:Country)
  • Paesi/aree geografiche appartengono ai continenti: (:Country)-[:isPartOf]->(:Continent)

Interazioni di contenuto (likes):

  • Persone come post: (:Person)-[:likes]->(:Post)
  • Persone come commenti: (:Person)-[:likes]->(:Comment)
  • Persone come i messaggi: (:Person)-[:likes]->(<:Message)

Posizione geografica (isLocatedIn):

  • Le persone vivono in città: (:Person)-[:isLocatedIn]->(:City)
  • Università situate in città: (:University)-[:isLocatedIn]->(:City)
  • Aziende situate in paesi/aree geografiche: (:Company)-[:isLocatedIn]->(:Country)
  • Posti situati in paesi/regioni: (:Post)-[:isLocatedIn]->(:Country)
  • Commenti localizzati nei paesi/regioni: (:Comment)-[:isLocatedIn]->(:Country)

Vincoli di chiave

Ogni tipo di nodo ha un vincolo di chiave corrispondente che garantisce l'identificazione univoca per id proprietà:

  • tag_class_pk, tag_pk, place_pk, organization_pkperson_pk, , forum_pkmessage_pk