Introducció a les bases de dades de gràfics SQL Server 2017

Abans de l'inici del curs "Desenvolupador MS SQL Server" Hem preparat una altra traducció útil per a tu.

Les bases de dades de gràfics són una tecnologia important per als professionals de bases de dades. Intento estar al dia de les innovacions i noves tecnologies en aquest àmbit i, després de treballar amb bases de dades relacionals i NoSQL, veig que el paper de les bases de dades de gràfics és cada cop més important. Quan es treballa amb dades jeràrquiques complexes, no només les bases de dades tradicionals són ineficaces, sinó també NoSQL. Sovint, a mesura que augmenta el nombre de nivells de connexió i la mida de la base de dades, el rendiment disminueix. I a mesura que les relacions es fan més complexes, el nombre de JOIN també augmenta.

Per descomptat, el model relacional té solucions per treballar amb jerarquies (per exemple, utilitzant CTE recursius), però aquestes encara són solucions alternatives. Al mateix temps, la funcionalitat de les bases de dades de gràfics de SQL Server us permet gestionar fàcilment diversos nivells de jerarquia. Tant el model de dades com les consultes es simplifiquen i, per tant, augmenta la seva eficiència. La quantitat de codi es redueix significativament.

Les bases de dades de gràfics són un llenguatge expressiu per representar sistemes complexos. Aquesta tecnologia ja s'utilitza força a la indústria informàtica en àrees com les xarxes socials, els sistemes antifrau, l'anàlisi de xarxes informàtiques, les recomanacions socials, les recomanacions de productes i continguts.

La funcionalitat de la base de dades de gràfics a SQL Server és adequada per a escenaris on les dades estan molt interconnectades i tenen relacions ben definides.

Model de dades gràfics

Un gràfic és un conjunt de vèrtexs (nodes) i arestes (relacions, aresta). Els vèrtexs representen entitats i les vores representen relacions els atributs de les quals poden contenir informació.

Una base de dades de gràfics modela entitats com un gràfic tal com es defineix a la teoria de grafs. Les estructures de dades són vèrtexs i arestes. Els atributs són propietats dels vèrtexs i les arestes. Una connexió és una connexió de vèrtexs.

A diferència d'altres models de dades, les bases de dades de gràfics prioritzen les relacions entre entitats. Per tant, no cal calcular les relacions amb claus forasteres o cap altre mitjà. És possible crear models de dades complexos utilitzant només abstraccions de vèrtex i vores.

En el món modern, modelar relacions requereix tècniques cada cop més complexes. Per modelar les relacions, SQL Server 2017 ofereix capacitats de base de dades de gràfics. Els vèrtexs i les arestes del gràfic es representen com nous tipus de taules: NODE i BORDA. Les consultes de gràfics utilitzen una nova funció T-SQL anomenada MATCH(). Com que aquesta funcionalitat està integrada a SQL Server 2017, es pot utilitzar a les vostres bases de dades existents sense necessitat de cap conversió.

Beneficis del model gràfic

Avui dia, les empreses i els usuaris demanen aplicacions que gestionen més i més dades, alhora que esperen un alt rendiment i fiabilitat. Representar les dades com un gràfic ofereix un mitjà convenient per manejar relacions complexes. Aquest enfocament resol molts problemes i ajuda a obtenir resultats en un context determinat.

Sembla que moltes aplicacions es beneficiaran de l'ús de bases de dades de gràfics en el futur.

Modelització de dades: del model relacional al model gràfic

Introducció a les bases de dades de gràfics SQL Server 2017
Exemple

Vegem un exemple d'estructura organitzativa amb una jerarquia d'empleats: un empleat depèn d'un gerent, un gerent depèn d'un alt directiu, etc. Depenent de l'empresa concreta, hi pot haver qualsevol nombre de nivells en aquesta jerarquia. Però a mesura que augmenta el nombre de nivells, calcular les relacions en una base de dades relacional es fa cada cop més difícil. És força difícil imaginar la jerarquia dels empleats, la jerarquia en màrqueting o les connexions a les xarxes socials. Vegem com SQL Graph pot resoldre el problema de manejar diferents nivells de jerarquia.

Per a aquest exemple farem un model de dades senzill. Creem una taula d'empleats EMP amb DNI EMPNO i columna M.G.R., indicant l'identificador del supervisor (gerent) de l'empleat. Tota la informació sobre la jerarquia s'emmagatzema en aquesta taula i es pot consultar mitjançant columnes EMPNO и M.G.R..

Introducció a les bases de dades de gràfics SQL Server 2017
El diagrama següent mostra el mateix model d'estructura organitzativa amb quatre nivells de nidificació d'una forma més familiar. Els empleats són els vèrtexs d'un gràfic d'una taula EMP. L'entitat "empleat" està connectada a si mateixa per la connexió "submits" (ReportsTo). En termes gràfics, un enllaç és una vora (EDGE) que connecta els nodes (NODE) ​​dels empleats.

Introducció a les bases de dades de gràfics SQL Server 2017

Creem una taula normal EMP i afegiu-hi els valors d'acord amb 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 imatge següent mostra els empleats:

  • empleat amb EMPNO 7369 obeeix 7902;
  • empleat amb EMPNO 7902 obeeix 7566
  • empleat amb EMPNO 7566 obeeix 7839

Introducció a les bases de dades de gràfics SQL Server 2017
Vegem ara una representació gràfica de les mateixes dades. El vèrtex EMPLOYEE té diversos atributs i està connectat a si mateix per la relació de "subordinats" (EmplReportsTo). EmplReportsTo és el nom de la relació.

La taula de vores (EDGE) també pot contenir atributs.

Introducció a les bases de dades de gràfics SQL Server 2017
Creem una taula de nodes EmpNode

La sintaxi per crear un node és bastant simple: a l'expressió CREA TAULA s'afegeix al final "COM NODE".

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

Ara convertim les dades d'una taula normal a una de gràfica. Pròxim INSERT insereix dades d'una taula relacional EMP.

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

Introducció a les bases de dades de gràfics SQL Server 2017
A la taula de nodes en una columna especial $node_id_* l'identificador del node s'emmagatzema com a JSON. Les columnes restants d'aquesta taula contenen els atributs del node.

Creació de vores (EDGE)

Crear una taula de vora és molt semblant a crear una taula de nodes, excepte que s'utilitza la paraula clau "COM A BORDA".

CREATE TABLE empReportsTo(Deptno int) AS EDGE

Introducció a les bases de dades de gràfics SQL Server 2017

Ara anem a definir les connexions entre els empleats mitjançant columnes EMPNO и M.G.R.. El diagrama de l'estructura organitzativa mostra clarament com s'ha d'escriure 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 taula de vora predeterminada consta de tres columnes. Primer, $edge_id — identificador de vora en forma JSON. Els altres dos ($from_id и $to_id) representen la connexió entre nodes. A més, les vores poden tenir propietats addicionals. En el nostre cas ho és Deptno.

Vistes del sistema

A la vista del sistema sys.tables han aparegut dues columnes noves:

  1. is_edge
  2. is_node

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

Introducció a les bases de dades de gràfics SQL Server 2017

SSMS

Els objectes relacionats amb els gràfics es troben a la carpeta Taules de gràfics. La icona de la taula de nodes està marcada amb un punt i la icona de la taula de vora està marcada amb dos cercles connectats (una mica com les ulleres).

Introducció a les bases de dades de gràfics SQL Server 2017

expressió MATCH

Expressió PARTIT extret de CQL (Cypher Query Language). Aquesta és una manera eficient de consultar les propietats d'un gràfic. CQL comença amb una expressió PARTIT.

sintaxi

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

Примеры

Vegem-ne uns quants exemples.

La consulta següent mostra els empleats als quals Smith i el seu gerent informen.

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ó a les bases de dades de gràfics SQL Server 2017
La consulta següent és per trobar empleats i gestors de segon nivell de Smith. Si elimineu la frase WHERE, aleshores el resultat mostrarà tots els empleats.

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ó a les bases de dades de gràfics SQL Server 2017
I, finalment, una petició per als empleats i directius de tercer nivell.

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ó a les bases de dades de gràfics SQL Server 2017
Ara anem a canviar de direcció per aconseguir els caps 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ó a les bases de dades de gràfics SQL Server 2017

Conclusió

SQL Server 2017 s'ha consolidat com una solució empresarial completa per a diverses tasques empresarials de TI. La primera versió de SQL Graph és molt prometedora. Malgrat algunes limitacions, ja hi ha prou funcionalitat per explorar les capacitats dels gràfics.

La funcionalitat SQL Graph està totalment integrada al motor SQL. Tanmateix, com ja s'ha dit, SQL Server 2017 té les limitacions següents:

Sense suport de polimorfisme.

  • Només s'admeten connexions unidireccionals.
  • Edges no pot actualitzar les columnes $from_id i $to_id mitjançant UPDATE.
  • Els tancaments transitius no s'admeten, però es poden obtenir mitjançant CTE.
  • El suport per als objectes OLTP a la memòria és limitat.
  • No s'admeten les taules temporals (Taula temporal amb versions del sistema), les taules locals i globals temporals.
  • Els tipus de taula i les variables de taula no es poden declarar com a NODE o EDGE.
  • No s'admeten consultes entre bases de dades.
  • No hi ha cap manera directa o assistent per convertir taules normals en taules gràfics.
  • No hi ha una GUI per mostrar gràfics, però podeu utilitzar Power BI.

Introducció a les bases de dades de gràfics SQL Server 2017

Llegeix més:

Font: www.habr.com

Afegeix comentari