Поделиться через


Пример схемы GQL: социальная сеть

Замечание

Эта функция сейчас доступна в общедоступной предварительной версии. Эта предварительная версия предоставляется без соглашения на уровне обслуживания и не рекомендуется для рабочих нагрузок. Некоторые функции могут не поддерживаться или их возможности могут быть ограничены. Для получения дополнительной информации см. Дополнительные условия использования для предварительных версий Microsoft Azure.

В этой статье приведена полная техническая спецификация для типа графа социальных сетей, используемого в документации по GQL. Эта схема демонстрирует множество распространенных функций сложных графов и служит основой для всех примеров запросов в документации по языку GQL.

Замечание

Социальная сеть является примером, производным от SNB LDBC (LDBC Social Network Benchmark), опубликованного GDC (Graph Data Council). Дополнительные сведения см. в статье "Тест социальной сети LDBC". См. пример набора графов социальных сетей , чтобы узнать, как получить копию производного набора данных.

Схема социальной сети.

Спецификация домена

Домен социальной сети моделирует комплексную социальную платформу со следующими сущностями:

  • Люди с демографическими и поведенческими свойствами
  • Организации , включая учебные заведения (университеты) и работодателей (компании)
  • Географическая иерархия из городов через страны или регионы на континенты
  • Система содержимого с форумами, записями и потоковыми комментариями
  • Система таксономии с классификациями тегов и тегов
  • Социальные и профессиональные отношения между людьми и организациями

Дополнительные сведения о сущностях этого домена см. в руководстве по языку GQL.

Показанные функции схемы

Этот тип графа демонстрирует расширенные возможности GQL:

  • Наследование типов узла с помощью абстрактных базовых типов (Message, Organization, Place)
  • Несколько шаблонов наследования с определениями общих свойств
  • Семейства типов Edge , в которых одна и та же метка связей соединяет различные сочетания типов узлов
  • Комплексная система ограничений , обеспечивающая целостность данных с помощью ключевых ограничений
  • Шаблоны смешанных связей , включая иерархические соединения, социальные подключения и взаимодействие с содержимым

Полное определение схемы

Следующий тип графа предоставляет полное определение схемы в синтаксисе 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)

Анализ схемы

Иерархия типов узлов

Схема определяет три иерархии наследования:

Географическая иерархия:

  • Place(абстракт) → City, CountryContinent

Иерархия организации:

  • Organization (абстрактный) → University, Company

Иерархия содержимого:

  • Message (абстрактный) → Post, Comment

Семейства типов edge

Несколько семейств типов типов форм пограничных меток, соединяющих различные сочетания узлов:

Связи расположения (isPartOf):

  • Города относятся к странам и регионам: (:City)-[:isPartOf]->(:Country)
  • Страны и регионы относятся к континентам: (:Country)-[:isPartOf]->(:Continent)

Взаимодействие с содержимым (likes):

  • Люди, такие как записи: (:Person)-[:likes]->(:Post)
  • Люди, такие как комментарии: (:Person)-[:likes]->(:Comment)
  • Люди, такие как сообщения: (:Person)-[:likes]->(<:Message)

Географическое расположение (isLocatedIn):

  • Люди живут в городах: (:Person)-[:isLocatedIn]->(:City)
  • Университеты, расположенные в городах: (:University)-[:isLocatedIn]->(:City)
  • Компании, расположенные в странах и регионах: (:Company)-[:isLocatedIn]->(:Country)
  • Публикации, расположенные в странах/регионах: (:Post)-[:isLocatedIn]->(:Country)
  • Комментарии, расположенные в странах/регионах: (:Comment)-[:isLocatedIn]->(:Country)

Ограничения ключей

Каждый тип узла имеет соответствующее ограничение ключа, обеспечивающее уникальное определение по id свойству:

  • tag_class_pk, tag_pk, place_pkorganization_pkperson_pkforum_pkmessage_pk