Introducción a las bases de datos gráficas de SQL Server 2017

Antes del inicio del curso "Desarrollador MS SQL Server" Hemos preparado otra traducción útil para usted.

Las bases de datos de grafos son una tecnología importante para los profesionales de las bases de datos. Trato de seguir las innovaciones y las nuevas tecnologías en esta área y después de trabajar con bases de datos relacionales y NoSQL, veo que el papel de las bases de datos gráficas es cada vez más importante. Cuando se trabaja con datos jerárquicos complejos, no solo las bases de datos tradicionales, sino también NoSQL, son ineficaces. A menudo, con un aumento en el número de niveles de enlace y el tamaño de la base de datos, hay una disminución en el rendimiento. Y a medida que las relaciones se vuelven más complejas, el número de JOIN también aumenta.

Por supuesto, en el modelo relacional hay soluciones para trabajar con jerarquías (por ejemplo, usando CTE recursivos), pero aún son soluciones alternativas. Al mismo tiempo, la funcionalidad de las bases de datos de gráficos de SQL Server facilita el manejo de múltiples niveles de jerarquía. Tanto el modelo de datos como las consultas se simplifican, por lo que se incrementa su eficiencia. Reduce significativamente la cantidad de código.

Las bases de datos de gráficos son un lenguaje expresivo para representar sistemas complejos. Esta tecnología ya se usa bastante en la industria de TI en áreas como redes sociales, sistemas antifraude, análisis de redes de TI, recomendaciones sociales, recomendaciones de productos y contenido.

La funcionalidad de la base de datos de gráficos en SQL Server es adecuada para escenarios donde los datos están altamente interconectados y tienen relaciones bien definidas.

modelo de datos gráfico

Un gráfico es un conjunto de vértices (nodos, nodo) y aristas (relaciones, arista). Los vértices representan entidades y los bordes representan enlaces cuyos atributos pueden contener información.

Una base de datos de grafos modela entidades como un gráfico como se define en la teoría de grafos. Las estructuras de datos son vértices y aristas. Los atributos son propiedades de vértices y aristas. Una conexión es una conexión de vértices.

A diferencia de otros modelos de datos, las bases de datos de gráficos priorizan las relaciones entre entidades. Por lo tanto, no hay necesidad de calcular las relaciones usando claves foráneas o de alguna otra forma. Es posible crear modelos de datos complejos usando solo abstracciones de vértices y bordes.

En el mundo actual, modelar relaciones requiere técnicas cada vez más sofisticadas. Para modelar relaciones, SQL Server 2017 ofrece capacidades de base de datos de gráficos. Los vértices y aristas del gráfico se representan como nuevos tipos de tablas: NODO y BORDE. Las consultas de gráficos usan una nueva función T-SQL llamada MATCH(). Dado que esta funcionalidad está integrada en SQL Server 2017, se puede usar en sus bases de datos existentes sin necesidad de ninguna conversión de base de datos.

Beneficios del modelo gráfico

Hoy en día, las empresas y los usuarios demandan aplicaciones que trabajen con más y más datos, esperando un alto rendimiento y confiabilidad. La representación gráfica de datos ofrece un medio conveniente para manejar relaciones complejas. Este enfoque resuelve muchos problemas y ayuda a obtener resultados dentro de un contexto dado.

Parece que muchas aplicaciones se beneficiarán de las bases de datos de gráficos en el futuro.

Modelado de datos: del modelado relacional al gráfico

Introducción a las bases de datos gráficas de SQL Server 2017
ejemplo

Veamos un ejemplo de una estructura organizacional con una jerarquía de empleados: un empleado informa a un gerente, un gerente informa a un gerente senior, y así sucesivamente. Dependiendo de la empresa específica, puede haber cualquier número de niveles en esta jerarquía. Pero a medida que aumenta el número de niveles, calcular las relaciones en una base de datos relacional se vuelve cada vez más difícil. Es bastante difícil imaginar la jerarquía de los empleados, la jerarquía en el marketing o las conexiones en las redes sociales. Veamos cómo SQL Graph puede resolver el problema de manejar diferentes niveles de jerarquía.

Para este ejemplo, hagamos un modelo de datos simple. Crear una tabla de empleados EMP con identificación EMPNO y columna MGRA que apunta al ID del jefe (gerente) del empleado. Toda la información sobre la jerarquía se almacena en esta tabla y se puede consultar mediante columnas EMPNO и MGR.

Introducción a las bases de datos gráficas de SQL Server 2017
El siguiente diagrama también muestra el mismo modelo de organigrama con cuatro niveles de anidamiento en una forma más familiar. Los empleados son los vértices del gráfico de la tabla. EMP. La entidad "empleado" está vinculada a sí misma por la relación "envía" (ReportsTo). En términos gráficos, un enlace es un borde (BORDE) que conecta nodos (NODOS) de empleados.

Introducción a las bases de datos gráficas de SQL Server 2017

Vamos a crear una tabla regular EMP y agregue valores allí de acuerdo con el 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)

La siguiente figura muestra a los empleados:

  • empleado con EMPNO 7369 está subordinado a 7902;
  • empleado con EMPNO 7902 subordinado a 7566
  • empleado con EMPNO 7566 subordinado a 7839

Introducción a las bases de datos gráficas de SQL Server 2017
Ahora veamos la representación de los mismos datos en forma de gráfico. El nodo EMPLEADO tiene varios atributos y está vinculado a sí mismo por una relación de "envíos" (EmplReportsTo). EmplReportsTo es el nombre de la relación.

La tabla perimetral (EDGE) también puede tener atributos.

Introducción a las bases de datos gráficas de SQL Server 2017
Crear una tabla de nodos EmpNode

La sintaxis para crear un nodo es bastante simple: a la expresión Crear mesa añadido al 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;

Ahora vamos a convertir los datos de una tabla regular a una gráfica. Próximo INSERT inserta datos de una tabla relacional EMP.

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

Introducción a las bases de datos gráficas de SQL Server 2017
En la tabla de nodos en una columna especial $node_id_* el ID de host se almacena como JSON. Las columnas restantes de esta tabla contienen los atributos del nodo.

Crear bordes (EDGE)

Crear una tabla perimetral es muy similar a crear una tabla de nodos, excepto que la palabra clave COMO BORDE.

CREATE TABLE empReportsTo(Deptno int) AS EDGE

Introducción a las bases de datos gráficas de SQL Server 2017

Ahora definamos relaciones entre empleados usando columnas EMPNO и MGR. El organigrama muestra claramente cómo escribir INSERT.

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);

La tabla perimetral tiene tres columnas por defecto. Primero, $edge_id — identificador de borde en forma de JSON. Los otros dos ($from_id и $to_id) representan la relación entre nodos. Además, los bordes pueden tener propiedades adicionales. En nuestro caso, este depto.

Vistas del sistema

En la vista del sistema sys.tables Hay dos nuevas columnas:

  1. es_borde
  2. es_nodo

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

Introducción a las bases de datos gráficas de SQL Server 2017

SSMS

Los objetos relacionados con los gráficos se encuentran en la carpeta Tablas de gráficos. El icono de la tabla de nodos está marcado con un punto y el icono de la tabla de bordes está marcado con dos círculos conectados (que se parece un poco a unas gafas).

Introducción a las bases de datos gráficas de SQL Server 2017

expresión COINCIDIR

Expresión PARTIDO tomado de CQL (Cypher Query Language). Esta es una forma eficiente de consultar las propiedades de un gráfico. CQL comienza con una expresión PARTIDO.

sintaxis

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

Примеры

Veamos algunos ejemplos.

La consulta a continuación muestra los empleados a los que reportan Smith y su gerente.

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'

Introducción a las bases de datos gráficas de SQL Server 2017
La siguiente consulta es para encontrar empleados y gerentes de segundo nivel para Smith. Si quitas la oferta ¿Dónde?, entonces todos los empleados se mostrarán como resultado.

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'

Introducción a las bases de datos gráficas de SQL Server 2017
Y finalmente, una solicitud para empleados y gerentes de tercer 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'

Introducción a las bases de datos gráficas de SQL Server 2017
Ahora cambiemos de dirección para atrapar a los jefes 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)

Introducción a las bases de datos gráficas de SQL Server 2017

Conclusión

SQL Server 2017 se ha establecido como una solución empresarial completa para una variedad de necesidades de TI comerciales. La primera versión de SQL Graph es muy prometedora. Incluso a pesar de algunas limitaciones, ya existe suficiente funcionalidad para explorar las posibilidades de los gráficos.

La funcionalidad de SQL Graph está totalmente integrada en SQL Engine. Sin embargo, como ya se mencionó, SQL Server 2017 tiene las siguientes limitaciones:

No hay soporte para polimorfismo.

  • Solo se admiten enlaces unidireccionales.
  • Los bordes no pueden actualizar sus columnas $from_id y $to_id a través de ACTUALIZAR.
  • No se admiten los cierres transitivos, pero se pueden obtener mediante CTE.
  • Soporte limitado para objetos OLTP en memoria.
  • Las tablas temporales (tabla temporal con versión del sistema), las tablas temporales locales y globales no son compatibles.
  • Los tipos de tabla y las variables de tabla no se pueden declarar como NODE o EDGE.
  • No se admiten consultas entre bases de datos.
  • No existe una forma directa o algún tipo de asistente (asistente) para convertir tablas regulares en tablas gráficas.
  • No hay GUI para mostrar gráficos, pero se puede usar Power BI.

Introducción a las bases de datos gráficas de SQL Server 2017

Lee mas:

Fuente: habr.com

Añadir un comentario