Introduzione à SQL Server 2017 Graph Databases

Prima di u principiu di u corsu "Sviluppatore MS SQL Server" Avemu preparatu una altra traduzzione utile per voi.

I basa di dati di gràficu sò una tecnulugia impurtante per i prufessiunali di basa di dati. Pruvate di seguità l'innuvazioni è e novi tecnulugii in questa zona è dopu avè travagliatu cù basa di dati relazionale è NoSQL, vecu chì u rolu di e basa di dati di gràficu hè diventatu sempre più. Quandu travaglia cù dati gerarchichi cumplessi, micca solu e basa di dati tradiziunali, ma ancu NoSQL sò inefficaci. Spessu, cù un aumentu di u nùmeru di livelli di ligame è a dimensione di a basa di dati, ci hè una diminuzione di u rendiment. E cum'è e rilazioni diventanu più cumplessi, u numeru di JOIN cresce ancu.

Di sicuru, in u mudellu relazionale ci sò suluzioni per travaglià cù ierarchie (per esempiu, utilizendu CTE recursive), ma sò sempre solu solu. À u listessu tempu, a funziunalità di e basa di dati di gràficu SQL Server facilita a gestione di parechji livelli di gerarchia. Sia u mudellu di dati è e dumande sò simplificati, è per quessa a so efficienza hè aumentata. Reduce significativamente a quantità di codice.

I basa di dati di gràficu sò una lingua espressiva per rapprisintà sistemi cumplessi. Sta tecnulugia hè digià abbastanza largamente usata in l'industria di l'IT in settori cum'è e rete soziale, sistemi anti-fraude, analisi di rete IT, raccomandazioni suciali, cunsiglii di produttu è cuntenutu.

A funziunalità di a basa di dati di gràficu in SQL Server hè adattatu per scenarii induve i dati sò assai interconnessi è anu relazioni ben definite.

Mudellu di dati gràficu

Un gràficu hè un inseme di vertici (nodi, nodi) è bordi (relazioni, arghjintini). I vertici rapprisentanu entità, è i bordi rapprisentanu ligami chì l'attributi ponu cuntene infurmazioni.

Una basa di dati di graficu modella l'entità cum'è un graficu cum'è definitu in a teoria di u graficu. Strutture di dati sò vertici è bordi. L'attributi sò pruprietà di i vertici è di i bordi. Una cunnessione hè una cunnessione di vertici.

A cuntrariu di l'altri mudelli di dati, e basa di dati di gràficu dà priorità à e relazioni trà entità. Per quessa, ùn ci hè bisognu di calculà e rilazioni usendu chjavi stranieri o in qualchì altru modu. Hè pussibule di creà mudelli di dati cumplessi utilizendu solu astrazioni di vertice è di punta.

In u mondu d'oghje, e relazioni di mudeli necessitanu tecniche più è più sofisticate. Per mudificà e relazioni, SQL Server 2017 offre capacità di basa di dati di graficu. I vertici è i bordi di u graficu sò rapprisentati cum'è novi tipi di tavule: NODE è EDGE. E dumande di graficu utilizanu una nova funzione T-SQL chjamata MATCH (). Siccomu sta funziunalità hè integrata in SQL Server 2017, pò esse aduprata in e vostre basa di dati esistenti senza bisognu di cunversione di basa di dati.

Beneficii di u mudellu di Graficu

Oghje, l'imprese è l'utilizatori dumandanu applicazioni chì travaglianu cù più è più dati, aspittendu un altu rendiment è affidabilità. A rapprisintazioni grafica di e dati offre un modu convenientu per trattà e relazioni cumplessi. Stu approcciu risolve parechji prublemi è aiuta à ottene risultati in un determinatu cuntestu.

Sembra chì parechje applicazioni prufittàranu di basa di dati di gràficu in u futuru.

Mudelle di Dati: Da a Modellazione Relazionale à Grafica

Introduzione à SQL Server 2017 Graph Databases
Esempiu:

Fighjemu un esempiu di una struttura di l'urganizazione cù una ghjerarchia di l'impiegati: un impiigatu rapporta à un manager, un manager rapporta à un senior manager, è cusì. Sicondu a cumpagnia specifica, pò esse un numeru di livelli in questa ghjerarchia. Ma cum'è u numeru di livelli aumenta, u calculu di relazioni in una basa di dati relazionale diventa più è più difficiule. Hè abbastanza difficiuli di imaginà a ghjerarchia di l'impiegati, a ghjerarchia in marketing o cunnessione di e social media. Videmu cumu SQL Graph pò risolve u prublema di gestisce diversi livelli di ierarchia.

Per questu esempiu, femu un mudellu di dati simplice. Crea una tavola di l'impiegati Emp cun id EMPNO è a colonna M.G.R.A chì punta à l'ID di u capu (manager) di l'impiigatu. Tutta l'infurmazione nantu à a ghjerarchia hè guardata in questa tavula è pò esse dumandata cù e colonne EMPNO и M.G.R..

Introduzione à SQL Server 2017 Graph Databases
U schema seguente mostra ancu u listessu mudellu di organigramma cù quattru livelli di nidificazione in una forma più familiar. L'impiegati sò i vertici di u graficu da a tavula Emp. L'entità "impiegatu" hè ligata à sè stessu da a relazione "sottomette" (ReportsTo). In termini di graficu, un ligame hè un bordu (EDGE) chì cunnetta i nodi (NODE) ​​di l'impiegati.

Introduzione à SQL Server 2017 Graph Databases

Creemu una tavola regulare Emp è aghjunghje i valori quì secondu u schema sopra.

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 figura sottu mostra l'impiegati:

  • impiegatu cun EMPNO 7369 hè subordinatu à 7902;
  • impiegatu cun EMPNO 7902 subordinatu à 7566
  • impiegatu cun EMPNO 7566 subordinatu à 7839

Introduzione à SQL Server 2017 Graph Databases
Avà fighjemu a rapprisintazioni di i stessi dati in forma di graficu. U node EMPLOYEE hà parechje attributi è hè ligatu à ellu stessu da una relazione "submits" (EmplReportsTo). EmplReportsTo hè u nome di a relazione.

A tavola di u bordu (EDGE) pò ancu avè attributi.

Introduzione à SQL Server 2017 Graph Databases
Crea una tabella di nodi EmpNode

A sintassi per creà un node hè abbastanza simplice: à l'espressione CREATE TABLE aghjuntu à a fine AS 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;

Avà cunvertisce i dati da una tavula regulare à un graficu. Dopu INSERITU inserisce dati da una tavola relazionale Emp.

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

Introduzione à SQL Server 2017 Graph Databases
In a table node in una colonna speciale $node_id_* l'ID di l'ospite hè guardatu cum'è JSON. I culonni rimanenti di sta tabella cuntenenu l'attributi di u node.

Crea bordi (EDGE)

A creazione di una tavola di punta hè assai simili à a creazione di una tavola di node, salvu chì a keyword AS EDGE.

CREATE TABLE empReportsTo(Deptno int) AS EDGE

Introduzione à SQL Server 2017 Graph Databases

Avà definiscemu e relazioni trà l'impiegati chì utilizanu colonne EMPNO и M.G.R.. L'organigramma mostra chjaramente cumu scrive INSERITU.

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 tavola di u bordu hà trè culonni per difettu. Primu, $edge_id - identificatore di bordu in forma di JSON. L'altri dui ($from_id и $to_id) rapprisentanu a relazione trà i nodi. Inoltre, i bordi ponu avè proprietà supplementari. In u nostru casu, questu Dipartimentu.

Viste di u sistema

In vista di u sistema sys.tables Ci sò duie colonne novi:

  1. is_edge
  2. is_node

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

Introduzione à SQL Server 2017 Graph Databases

ssms

L'uggetti ligati à i gràfici sò situati in u cartulare di Tabelle di Graficu. L'icona di a tavula di u nodu hè marcatu cù un puntu, è l'icona di a tavola di u bordu hè marcatu cù dui circles cunnessi (chì pare un pocu cum'è vetri).

Introduzione à SQL Server 2017 Graph Databases

spressione MATCH

Spressione PARTITU presa da CQL (Cypher Query Language). Questu hè un modu efficace per interrogà e proprietà di un graficu. CQL principia cù una espressione PARTITU.

fuori

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

esempi

Fighjemu uni pochi di esempi.

A dumanda quì sottu mostra l'impiegati chì Smith è u so manager raportanu.

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'

Introduzione à SQL Server 2017 Graph Databases
A seguente dumanda hè per truvà l'impiegati è i gestori di u sicondu livellu per Smith. Se sguassate l'offerta , allura tutti l'impiegati seranu affissati com'è u risultatu.

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'

Introduzione à SQL Server 2017 Graph Databases
È infine, una dumanda per l'impiegati di u terzu livellu è i gestori.

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'

Introduzione à SQL Server 2017 Graph Databases
Avà cambiemu a direzzione per piglià i capi di 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)

Introduzione à SQL Server 2017 Graph Databases

cunchiusioni

SQL Server 2017 s'hè stabilitu cum'è una soluzione cumpleta di l'impresa per una varietà di bisogni IT di l'affari. A prima versione di SQL Graph hè assai promettente. Ancu malgradu qualchì limitazione, ci hè digià abbastanza funziunalità per scopre e pussibilità di i grafici.

A funziunalità SQL Graph hè cumplettamente integrata in SQL Engine. Tuttavia, cum'è digià dettu, SQL Server 2017 hà e seguenti limitazioni:

Nisun supportu per u polimorfismu.

  • Solu i ligami unidirezionali sò supportati.
  • Edges ùn pò micca aghjurnà e so colonne $from_id è $to_id via UPDATE.
  • I chjusi transitivi ùn sò micca supportati, ma ponu esse ottenuti usendu CTE.
  • Supportu limitatu per l'uggetti OLTP In-Memory.
  • Tavule Temporale (Tavola Temporale Versione di Sistema), tavule tempurale lucali è glubale ùn sò micca supportati.
  • Tipi di tavulinu è variabili di tabella ùn ponu micca esse dichjarati cum'è NODE o EDGE.
  • E dumande di basa di dati incruciate ùn sò micca supportate.
  • Ùn ci hè micca un modu direttu o qualchì tipu di mago (mago) per cunvertisce e tavule regulare in tavule grafiche.
  • Ùn ci hè micca GUI per vede gràfiche, ma Power BI pò esse usatu.

Introduzione à SQL Server 2017 Graph Databases

Leghjite più:

Source: www.habr.com

Add a comment