Обработка графов в SQL Server и Базы данных SQL Azure

Область применения: SQL Server 2017 (14.x) и более поздних версий Управляемого экземпляра Базы данныхSQL Azure SQL Azure

SQL Server предлагает возможности базы данных графа для моделирования связей "многие ко многим". Связи графов интегрируются в Transact-SQL и получают преимущества использования SQL Server в качестве базовой системы управления базами данных.

Что такое графовая база данных?

База данных графа представляет собой коллекцию узлов (или вершин) и ребер (или связей). Узел представляет сущность (например, пользователя или организацию), а ребро — связь между двумя узлами, которые оно соединяет (например, отметки "Нравится" или друзья). Оба узла и ребра могут иметь свойства, связанные с ними. Ниже приведены некоторые функции, благодаря которым графовая база данных является уникальной.

  • Ребра или связи в графовой базе данных являются сущностями первого класса, с которым могут быть связаны атрибуты или свойства.
  • Одно ребро может гибко соединить несколько узлов в графовой базе данных.
  • Вы можете легко выразить запросы на сопоставление шаблонов и навигацию со множеством переходов.
  • Вы можно легко выразить транзитивное замыкание и полиморфные запросы.

Когда следует использовать базу данных графа

Реляционная база данных может достичь всего, что может сделать графовая база данных. Однако база данных графа упрощает выражение определенных типов запросов. Кроме того, при определенных оптимизациях некоторые запросы могут выполняться лучше. Ваше решение выбрать реляционную или графовую базу данных основано на следующих факторах:

  • Приложение имеет иерархические данные. Тип данных HierarchyID можно использовать для реализации иерархий, но имеет некоторые ограничения. Например, он не позволяет хранить несколько родителей для узла.
  • Приложение имеет сложные связи "многие ко многим"; По мере развития приложения добавляются новые связи.
  • Вам необходимо анализировать взаимосвязанные данные и связи.

Функции Graph, представленные в SQL Server 2017 (14.x)

В SQL Server 2017 появились следующие функции.

Создание объектов графа

Расширения Transact-SQL позволяют пользователям создавать узлы или пограничные таблицы. Оба узла и ребра могут иметь свойства, связанные с ними. Так как узлы и ребер хранятся в виде таблиц, все операции, поддерживаемые реляционными таблицами, поддерживаются на узле или пограничной таблице. Ниже приведен пример:

CREATE TABLE Person (ID INTEGER PRIMARY KEY, Name VARCHAR(100), Age INT) AS NODE;
CREATE TABLE friends (StartDate date) AS EDGE;

На следующей схеме показано, как узлы и ребра хранятся в виде таблиц.

Diagram showing the Nodes and Edges are stored as tables.

Расширения языка запросов

Новое MATCH предложение представлено для поддержки сопоставления шаблонов и много прыжков навигации по графу. Функция MATCH использует синтаксис стиля ASCII для сопоставления шаблонов. Например, чтобы найти друзей "Джон":

-- Find friends of John
SELECT Person2.Name 
FROM Person Person1, Friends, Person Person2
WHERE MATCH(Person1-(Friends)->Person2)
AND Person1.Name = 'John';

Полностью интегрирована в ядро СУБД SQL Server

Расширения Graph полностью интегрированы в подсистему SQL Server. Используйте тот же механизм хранения, метаданные, обработчик запросов и т. д. для хранения и запроса данных графа. Запрос между графами и реляционными данными в одном запросе. Объединение возможностей графа с другими технологиями SQL Server, такими как индексы columnstore, службы ВЫСОКОЙ доступности, службы R и т. д. Граф SQL также поддерживает все функции безопасности и соответствия требованиям, доступные в SQL Server.

Инструментирование и экосистема

Преимущества существующих средств и экосистемы, которые предлагает SQL Server. Такие инструменты, как резервное копирование и восстановление, импорт и экспорт, BCP просто работают над полем. Другие средства или службы, такие как SSIS, SSRS или Power BI, работают с таблицами графов, так же, как они работают с реляционными таблицами.

Ограничения границ

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

Дополнительные сведения о создании и использовании пограничных ограничений см. в разделе "Ограничения пограничных вычислений".

Слияние DML

Инструкция MERGE выполняет операции вставки, обновления или удаления целевой таблицы на основе результатов соединения с исходной таблицей. Например, можно синхронизировать две таблицы, вставляя, обновляя или удаляя строки в целевую таблицу на основе различий между целевой таблицей и исходной таблицей. Использование предикатов MATCH в инструкции MERGE теперь поддерживается в Базе данных SQL Azure и vNext SQL Server. То есть теперь можно объединить текущие данные графа (узлы или пограничные таблицы) с новыми данными с помощью предикатов MATCH, чтобы указать связи графов в одной инструкции вместо отдельных инструкций INSERT/UPDATE/DELETE.

Дополнительные сведения о том, как совпадение можно использовать в слиянии DML, см. в инструкции MERGE.

Кратчайший путь

Функция SHORTEST_PATH находит кратчайший путь между двумя узлами в графе или начиная с заданного узла ко всем остальным узлам в графе. SHORTEST PATH также можно использовать для поиска транзитивного закрытия или для произвольных обходов длины в графе.

Далее