Published on

September 11, 2019

Исследование графовых таблиц SQL Server

В этой статье мы рассмотрим концепцию графовых таблиц в SQL Server и сравним их с реляционными аналогами. Графовые таблицы предназначены для решения конкретных запросов, что делает их ценным инструментом в сценарии базы данных фильмов.

Запрос актеров в фильме

Давайте начнем с ответа на вопрос: “Кто является актерами в этом фильме?” В реляционной базе данных мы обычно используем простое объединение двух таблиц:

SELECT c.actor_name 
FROM movies a, moviesactor b, actor c
WHERE a.MovieId = b.movieid 
AND b.actorid = c.ActorID
AND a.Movie_Title = 'Jurassic Park'

Однако с графовыми таблицами запрос становится более простым:

SELECT p.personname 
FROM dbo.personnode p, movienode m, moviesactorlink a
WHERE MATCH(m-(a)->p) 
AND m.movietitle = 'Jurassic Park'

Поиск самого продуктивного актера

Затем давайте определим самого продуктивного актера согласно набору данных. В реляционной базе данных мы бы использовали следующий запрос:

SELECT TOP 10 c.actor_name, COUNT(1) AS moviesactedin 
FROM movies a, moviesactor b, actor c
WHERE a.MovieId = b.movieid 
AND b.actorid = c.ActorID 
GROUP BY c.actor_name 
ORDER BY moviesactedin DESC

С графовыми таблицами запрос упрощается:

SELECT TOP 10 p.personname, COUNT(1) AS moviesactedin 
FROM dbo.personnode p, movienode m, moviesactorlink a
WHERE MATCH(m-(a)->p) 
GROUP BY p.personname 
ORDER BY moviesactedin DESC

Актеры, которые являются режиссерами

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

SELECT c.actor_name, a.Movie_Title 
FROM movies a 
INNER JOIN moviesactor b ON a.MovieId = b.movieid
INNER JOIN actor c ON b.actorid = c.ActorID
INNER JOIN MoviesDirector d ON a.MovieId = d.movieid 
INNER JOIN director e ON d.directorid = e.directorid
AND e.director_name = c.actor_name

С графовыми таблицами запрос становится:

SELECT p1.personname, m.movietitle 
FROM personnode p1, movienode m, moviesactorlink a, moviesdirectorlink d
WHERE MATCH(m-(d)->p1 AND m-(a)->p1)

Преимущества графовых таблиц

Графовые таблицы предлагают несколько преимуществ по сравнению с традиционными реляционными таблицами:

  1. Меньшее количество таблиц
  2. Легко писать запросы с меньшим количеством объединений

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

В следующей статье мы рассмотрим наиболее полезную функцию графовых таблиц – кратчайший путь. Следите за обновлениями!

Спасибо за чтение!

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.