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 le Condizioni supplementari per l'uso delle anteprime di Microsoft Azure.

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

Il social network è un esempio derivato dal LDBC SNB (LDBC Social Network Benchmark) pubblicato dal GDC (Graph Data Council). Per altri dettagli, vedere l'articolo "The LDBC Social Network Benchmark". Vedi esempio di dataset grafico dei social network per come ottenere una copia del dataset derivato.

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