Compartir a través de


Ejemplo de esquema de GQL: Red social

Nota:

Esta característica actualmente está en su versión preliminar pública. Esta versión preliminar se ofrece sin un contrato de nivel de servicio y no es aconsejable usarla para cargas de trabajo de producción. Es posible que algunas características no sean compatibles o que tengan sus funcionalidades limitadas. Para más información, consulte Términos de uso complementarios para las versiones preliminares de Microsoft Azure.

En este artículo se proporciona la especificación técnica completa para el tipo de grafo de red social que se usa en toda la documentación de GQL. Este esquema muestra muchas características comunes de grafos complejos y sirve como base para todos los ejemplos de consultas en la documentación del lenguaje GQL.

Nota:

La red social es un ejemplo de la SNB LDBC (LDBC Social Network Benchmark) publicada por el GDC (Graph Data Council). Consulte el artículo "The LDBC Social Network Benchmark" para obtener más información. Consulta el ejemplo de conjunto de datos de grafos de redes sociales para saber cómo obtener una copia del conjunto de datos derivado.

Diagrama que muestra el esquema de la red social.

Especificación de dominio

El dominio de red social modela una plataforma social completa con las siguientes entidades:

  • Personas con propiedades demográficas y de comportamiento
  • Organizaciones que incluyen instituciones educativas (universidades) y empleadores (empresas)
  • Jerarquía geográfica de ciudades a través de países o regiones a continentes
  • Sistema de contenido con foros, publicaciones y comentarios en subprocesos
  • Sistema de taxonomía con etiquetas y clasificaciones de etiquetas
  • Relaciones sociales y profesionales entre personas y organizaciones

Para obtener una introducción más detallada a las entidades de este dominio, consulte la guía del lenguaje GQL.

Características de esquema que se muestran

Este tipo de grafo muestra funcionalidades avanzadas de GQL:

  • Herencia de tipos de nodo mediante tipos base abstractos (Message, Organization, Place)
  • Varios patrones de herencia con definiciones de propiedades compartidas
  • Familias de tipos perimetrales en las que la misma etiqueta de relación conecta diferentes combinaciones de tipos de nodo
  • Sistema de restricciones completo que garantiza la integridad de los datos a través de restricciones clave
  • Patrones de relación mixtos , como la contención jerárquica, las conexiones sociales y las interacciones de contenido

Definición de esquema completa

El siguiente tipo de grafo proporciona una definición de esquema completa en la sintaxis de 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)

Análisis de esquemas

Jerarquía de tipos de nodo

El esquema define tres jerarquías de herencia:

Jerarquía geográfica:

  • Place(abstract) → City, , CountryContinent

Jerarquía organizativa:

  • Organization (resumen) → University, Company

Jerarquía de contenido:

  • Message (resumen) → Post, Comment

Familias de tipos de edge

Varias etiquetas perimetrales forman familias de tipos de formulario que conectan diferentes combinaciones de nodos:

Relaciones de ubicación (isPartOf):

  • Las ciudades pertenecen a países o regiones: (:City)-[:isPartOf]->(:Country)
  • Los países o regiones pertenecen a los continentes: (:Country)-[:isPartOf]->(:Continent)

Interacciones de contenido (likes):

  • Personas como publicaciones: (:Person)-[:likes]->(:Post)
  • Personas como comentarios: (:Person)-[:likes]->(:Comment)
  • Personas como mensajes: (:Person)-[:likes]->(<:Message)

Ubicación geográfica (isLocatedIn):

  • Las personas viven en ciudades: (:Person)-[:isLocatedIn]->(:City)
  • Universidades ubicadas en ciudades: (:University)-[:isLocatedIn]->(:City)
  • Empresas ubicadas en países o regiones: (:Company)-[:isLocatedIn]->(:Country)
  • Puestos ubicados en países/regiones: (:Post)-[:isLocatedIn]->(:Country)
  • Comentarios ubicados en países/regiones: (:Comment)-[:isLocatedIn]->(:Country)

Restricciones de clave

Cada tipo de nodo tiene una restricción de clave correspondiente que garantiza la identificación única por id propiedad:

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