Introdución ás bases de datos gráficas de SQL Server 2017

Antes do comezo do curso "Desenvolvedor de MS SQL Server" Preparamos outra tradución útil para ti.

As bases de datos gráficas son unha tecnoloxía importante para os profesionais de bases de datos. Intento estar ao día das innovacións e novas tecnoloxías neste ámbito e, despois de traballar con bases de datos relacionais e NoSQL, vexo que o papel das bases de datos gráficas cobra cada vez máis importancia. Cando se traballa con datos xerárquicos complexos, non só as bases de datos tradicionais son ineficaces, senón tamén NoSQL. Moitas veces, a medida que aumenta o número de niveis de conexión e o tamaño da base de datos, o rendemento diminúe. E a medida que as relacións se fan máis complexas, o número de JOIN tamén aumenta.

Por suposto, o modelo relacional ten solucións para traballar con xerarquías (por exemplo, usando CTE recursivos), pero estas aínda son solucións alternativas. Ao mesmo tempo, a funcionalidade das bases de datos de gráficos de SQL Server permítelle xestionar facilmente varios niveis de xerarquía. Tanto o modelo de datos como as consultas simplifícanse, polo que aumenta a súa eficiencia. A cantidade de código redúcese significativamente.

As bases de datos gráficas son unha linguaxe expresiva para representar sistemas complexos. Esta tecnoloxía xa é moi utilizada na industria das TI en áreas como redes sociais, sistemas antifraude, análise de redes de TI, recomendacións sociais, recomendacións de produtos e contidos.

A funcionalidade da base de datos de gráficos en SQL Server é adecuada para escenarios nos que os datos están moi interconectados e teñen relacións ben definidas.

Modelo gráfico de datos

Un gráfico é un conxunto de vértices (nodos) e arestas (relacións, aresta). Os vértices representan entidades e as arestas representan relacións cuxos atributos poden conter información.

Unha base de datos de grafos modela entidades como gráficas como se define na teoría de grafos. As estruturas de datos son vértices e arestas. Os atributos son propiedades de vértices e arestas. Unha conexión é unha conexión de vértices.

A diferenza doutros modelos de datos, as bases de datos de gráficos priorizan as relacións entre entidades. Polo tanto, non hai necesidade de calcular relacións utilizando claves estranxeiras ou calquera outro medio. É posible crear modelos de datos complexos usando só abstraccións de vértices e bordos.

No mundo moderno, modelar relacións require técnicas cada vez máis complexas. Para modelar relacións, SQL Server 2017 ofrece capacidades de base de datos de gráficos. Os vértices e arestas do gráfico represéntanse como novos tipos de táboas: NODO e BORDE. As consultas gráficas usan unha nova función T-SQL chamada MATCH(). Dado que esta funcionalidade está integrada en SQL Server 2017, pódese usar nas bases de datos existentes sen necesidade de ningunha conversión.

Beneficios do modelo gráfico

Hoxe, as empresas e os usuarios demandan aplicacións que manexan cada vez máis datos, mentres esperan un alto rendemento e fiabilidade. Representar os datos como un gráfico ofrece un medio cómodo de manexar relacións complexas. Este enfoque resolve moitos problemas e axuda a obter resultados nun contexto determinado.

Parece que moitas aplicacións se beneficiarán do uso de bases de datos de gráficos no futuro.

Modelado de datos: do modelo relacional ao gráfico

Introdución ás bases de datos gráficas de SQL Server 2017
Exemplo

Vexamos un exemplo dunha estrutura organizativa cunha xerarquía de empregados: un empregado reporta a un xestor, un xestor reporta a un alto directivo, etc. Dependendo da empresa específica, pode haber calquera número de niveis nesta xerarquía. Pero a medida que aumenta o número de niveis, o cálculo de relacións nunha base de datos relacional faise cada vez máis complexo. É bastante difícil imaxinar a xerarquía dos empregados, a xerarquía no marketing ou as conexións nas redes sociais. Vexamos como SQL Graph pode resolver o problema de manexar diferentes niveis de xerarquía.

Para este exemplo faremos un modelo de datos sinxelo. Imos crear unha táboa de empregados PMS con DNI EMPNO e columna M.G.R., indicando o identificador do supervisor (xerente) do empregado. Toda a información sobre a xerarquía gárdase nesta táboa e pódese consultar mediante columnas EMPNO и M.G.R..

Introdución ás bases de datos gráficas de SQL Server 2017
O seguinte diagrama mostra o mesmo modelo de estrutura organizativa con catro niveis de aniñación nunha forma máis familiar. Os empregados son os vértices dunha gráfica dunha táboa PMS. A entidade "empregado" está conectada a si mesma pola conexión "envía" (ReportsTo). En termos gráficos, unha ligazón é un bordo (EDGE) que conecta os nós (NODE) ​​dos empregados.

Introdución ás bases de datos gráficas de SQL Server 2017

Imos crear unha táboa normal PMS e engade os valores alí de acordo co diagrama anterior.

CREATE TABLE EMP
(EMPNO INT NOT NULL,
ENAME VARCHAR(20),
JOB VARCHAR(10),
MGR INT,
JOINDATE DATETIME,
SALARY DECIMAL(7, 2),
COMMISIION DECIMAL(7, 2),
DNO INT)
 
INSERT INTO EMP VALUES
(7369, 'SMITH', 'CLERK', 7902, '02-MAR-1970', 8000, NULL, 2),
(7499, 'ALLEN', 'SALESMAN', 7698, '20-MAR-1971', 1600, 3000, 3),
(7521, 'WARD', 'SALESMAN', 7698, '07-FEB-1983', 1250, 5000, 3),
(7566, 'JONES', 'MANAGER', 7839, '02-JUN-1961', 2975, 50000, 2),
(7654, 'MARTIN', 'SALESMAN', 7698, '28-FEB-1971', 1250, 14000, 3),
(7698, 'BLAKE', 'MANAGER', 7839, '01-JAN-1988', 2850, 12000, 3),
(7782, 'CLARK', 'MANAGER', 7839, '09-APR-1971', 2450, 13000, 1),
(7788, 'SCOTT', 'ANALYST', 7566, '09-DEC-1982', 3000, 1200, 2),
(7839, 'KING', 'PRESIDENT', NULL, '17-JUL-1971', 5000, 1456, 1),
(7844, 'TURNER', 'SALESMAN', 7698, '08-AUG-1971', 1500, 0, 3),
(7876, 'ADAMS', 'CLERK', 7788, '12-MAR-1973', 1100, 0, 2),
(7900, 'JAMES', 'CLERK', 7698, '03-NOV-1971', 950, 0, 3),
(7902, 'FORD', 'ANALYST', 7566, '04-MAR-1961', 3000, 0, 2),
(7934, 'MILLER', 'CLERK', 7782, '21-JAN-1972', 1300, 0, 1)

A seguinte imaxe mostra os empregados:

  • empregado con EMPNO 7369 obedece 7902;
  • empregado con EMPNO 7902 obedece a 7566
  • empregado con EMPNO 7566 obedece a 7839

Introdución ás bases de datos gráficas de SQL Server 2017
Agora vexamos unha representación gráfica dos mesmos datos. O vértice EMPLOYEE ten varios atributos e está conectado a si mesmo pola relación de "subordinados" (EmplReportsTo). EmplReportsTo é o nome da relación.

A táboa de bordos (EDGE) tamén pode conter atributos.

Introdución ás bases de datos gráficas de SQL Server 2017
Imos crear unha táboa de nodos EmpNode

A sintaxe para crear un nodo é bastante sinxela: á expresión CREAR TÁBOA engádese ao final "COMO NODO".

CREATE TABLE dbo.EmpNode(
ID Int Identity(1,1),
EMPNO NUMERIC(4) NOT NULL,
ENAME VARCHAR(10),
MGR NUMERIC(4),
DNO INT
) AS NODE;

Agora imos converter os datos dunha táboa normal a unha gráfica. A continuación inserción insire datos dunha táboa relacional PMS.

INSERT INTO EmpNode(EMPNO,ENAME,MGR,DNO) select empno,ename,MGR,dno from emp

Introdución ás bases de datos gráficas de SQL Server 2017
Na táboa de nós nunha columna especial $node_id_* o identificador do nodo almacénase como JSON. As columnas restantes desta táboa conteñen os atributos do nodo.

Creando bordos (EDGE)

Crear unha táboa de borde é moi similar a crear unha táboa de nodos, agás que se usa a palabra clave "COMO BORDE".

CREATE TABLE empReportsTo(Deptno int) AS EDGE

Introdución ás bases de datos gráficas de SQL Server 2017

Agora imos definir as conexións entre os empregados mediante columnas EMPNO и M.G.R.. O diagrama da estrutura organizativa mostra claramente como escribir inserción.

INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 1),
   	(SELECT $node_id FROM EmpNode WHERE id = 13),20);
INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 2),
   	(SELECT $node_id FROM EmpNode WHERE id = 6),10);
INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 3),
   	(SELECT $node_id FROM EmpNode WHERE id = 6),10)
INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 4),
   	(SELECT $node_id FROM EmpNode WHERE id = 9),30);
INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 5),
   	(SELECT $node_id FROM EmpNode WHERE id = 6),30);
INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 6),
   	(SELECT $node_id FROM EmpNode WHERE id = 9),30);
INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 7),
   	(SELECT $node_id FROM EmpNode WHERE id = 9),30);
INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 8),
   	(SELECT $node_id FROM EmpNode WHERE id = 4),30);
INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 9),
   	(SELECT $node_id FROM EmpNode WHERE id = 9),30);
INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 10),
   	(SELECT $node_id FROM EmpNode WHERE id = 6),30);
INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 11),
   	(SELECT $node_id FROM EmpNode WHERE id = 8),30);
INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 12),
   	(SELECT $node_id FROM EmpNode WHERE id = 6),30);
INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 13),
   	(SELECT $node_id FROM EmpNode WHERE id = 4),30);
INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 14),
   	(SELECT $node_id FROM EmpNode WHERE id = 7),30);

A táboa de bordos predeterminada consta de tres columnas. Primeira, $edge_id — identificador de borde en formato JSON. Os outros dous ($from_id и $to_id) representan a conexión entre nodos. Ademais, os bordos poden ter propiedades adicionais. No noso caso é Depto.

Vistas do sistema

Na vista do sistema sys.tables apareceron dúas novas columnas:

  1. is_edge
  2. is_node

SELECT t.is_edge,t.is_node,*
FROM sys.tables t
WHERE name like 'emp%'

Introdución ás bases de datos gráficas de SQL Server 2017

ssms

Os obxectos relacionados cos gráficos atópanse no cartafol Táboas gráficas. A icona da táboa de nodos está marcada cun punto e a icona da táboa de bordes está marcada con dous círculos conectados (un pouco como lentes).

Introdución ás bases de datos gráficas de SQL Server 2017

expresión MATCH

Expresión XOGO tomado de CQL (Cypher Query Language). Esta é unha forma eficiente de consultar as propiedades dun gráfico. CQL comeza cunha expresión XOGO.

sintaxe

MATCH (<graph_search_pattern>)
 
<graph_search_pattern>::=
    {<node_alias> {
                 	{ <-( <edge_alias> )- }
               	| { -( <edge_alias> )-> }
             	<node_alias>
             	}
 	}
 	[ { AND } { ( <graph_search_pattern> ) } ]
 	[ ,...n ]
 
<node_alias> ::=
    node_table_name | node_alias
 
<edge_alias> ::=
    edge_table_name | edge_alias

Exemplos

Vexamos algúns exemplos.

A seguinte consulta mostra os empregados aos que Smith e o seu director informan.

SELECT
E.EMPNO,E.ENAME,E.MGR,E1.EMPNO,E1.ENAME,E1.MGR
FROM
    empnode e, empnode e1, empReportsTo m
WHERE
    MATCH(e-(m)->e1)
and e.ENAME='SMITH'

Introdución ás bases de datos gráficas de SQL Server 2017
A seguinte consulta é para atopar empregados e xestores de segundo nivel de Smith. Se eliminas a frase ONDE, entón o resultado mostrará todos os empregados.

SELECT
E.EMPNO,E.ENAME,E.MGR,E1.EMPNO,E1.ENAME,E1.MGR,E2.EMPNO,e2.ENAME,E2.MGR
FROM
    empnode e, empnode e1, empReportsTo m ,empReportsTo m1, empnode e2
WHERE
    MATCH(e-(m)->e1-(m1)->e2)
and e.ENAME='SMITH'

Introdución ás bases de datos gráficas de SQL Server 2017
E por último, unha solicitude para empregados e directivos de terceiro nivel.

SELECT
E.EMPNO,E.ENAME,E.MGR,E1.EMPNO,E1.ENAME,E1.MGR,E2.EMPNO,e2.ENAME,E2.MGR,E3.EMPNO,e3.ENAME,E3.MGR
FROM
    empnode e, empnode e1, empReportsTo m ,empReportsTo m1, empnode e2, empReportsTo M2, empnode e3
WHERE
    MATCH(e-(m)->e1-(m1)->e2-(m2)->e3)
and e.ENAME='SMITH'

Introdución ás bases de datos gráficas de SQL Server 2017
Agora imos cambiar de dirección para conseguir os xefes de Smith.

SELECT
E.EMPNO,E.ENAME,E.MGR,E1.EMPNO,E1.ENAME,E1.MGR,E2.EMPNO,e2.ENAME,E2.MGR,E3.EMPNO,e3.ENAME,E3.MGR
FROM
    empnode e, empnode e1, empReportsTo m ,empReportsTo m1, empnode e2, empReportsTo M2, empnode e3
WHERE
    MATCH(e<-(m)-e1<-(m1)-e2<-(m2)-e3)

Introdución ás bases de datos gráficas de SQL Server 2017

Conclusión

SQL Server 2017 consolidouse como unha solución empresarial completa para varias tarefas empresariais de TI. A primeira versión de SQL Graph é moi prometedora. Aínda a pesar dalgunhas limitacións, xa hai funcionalidade suficiente para explorar as capacidades dos gráficos.

A funcionalidade de SQL Graph está totalmente integrada no motor SQL. Non obstante, como xa se indicou, SQL Server 2017 ten as seguintes limitacións:

Sen soporte de polimorfismo.

  • Só se admiten conexións unidireccionais.
  • Edges non pode actualizar as columnas $from_id e $to_id mediante UPDATE.
  • Non se admiten os peches transitivos, pero pódense obter mediante CTE.
  • A compatibilidade con obxectos OLTP na memoria é limitada.
  • Non se admiten as táboas temporais (Táboa temporal con versión do sistema), as táboas locais e globais temporais.
  • Os tipos de táboa e as variables de táboa non se poden declarar como NODE ou EDGE.
  • Non se admiten consultas entre bases de datos.
  • Non hai ningunha forma directa ou asistente de converter táboas normais en táboas gráficas.
  • Non hai unha GUI para mostrar gráficos, pero podes usar Power BI.

Introdución ás bases de datos gráficas de SQL Server 2017

Le máis:

Fonte: www.habr.com

Engadir un comentario