Yntroduksje ta SQL Server 2017 Graph Databases

Foar it begjin fan 'e kursus "MS SQL Server Untwikkelder" Wy hawwe in oare nuttige oersetting foar jo taret.

Grafyske databases binne in wichtige technology foar databaseprofessionals. Ik besykje de ynnovaasjes en nije technologyen op dit mêd te folgjen en nei it wurkjen mei relaasje- en NoSQL-databases, sjoch ik dat de rol fan grafyske databases hieltyd mear wurdt. By it wurkjen mei komplekse hiërargyske gegevens binne net allinich tradisjonele databases, mar ek NoSQL net effektyf. Faak, mei in tanimming fan it oantal keppelingsnivo's en de grutte fan 'e databank, is d'r in fermindering fan prestaasjes. En as de relaasjes komplekser wurde, nimt it oantal JOIN's ek ta.

Fansels binne yn it relaasjemodel oplossingen foar it wurkjen mei hierargyen (bygelyks mei rekursive CTE's), mar dit binne noch altiten oplossingen. Tagelyk makket de funksjonaliteit fan SQL Server-grafykdatabases it maklik om meardere nivo's fan hierargy te behanneljen. Sawol it gegevensmodel as fragen wurde ferienfâldige, en dêrom wurdt har effisjinsje ferhege. Ferminderet it bedrach fan koade signifikant.

Grafykdatabases binne in ekspressive taal foar it fertsjintwurdigjen fan komplekse systemen. Dizze technology wurdt al frij breed brûkt yn 'e IT-sektor yn gebieten lykas sosjale netwurken, anty-fraudesystemen, IT-netwurkanalyse, sosjale oanbefellings, oanbefellings foar produkten en ynhâld.

De grafyske databankfunksjonaliteit yn SQL Server is geskikt foar senario's wêr't de gegevens tige meiinoar ferbûn binne en goed definieare relaasjes hawwe.

Grafyk gegevens model

In grafyk is in set fan hoekpunten (knooppunten, knooppunten) en rânen (relaasjes, râne). Vertices fertsjintwurdigje entiteiten, en rânen fertsjintwurdigje keppelings wêrfan de attributen ynformaasje kinne befetsje.

In grafykdatabase modelleart entiteiten as in grafyk lykas definiearre yn grafteory. Gegevensstruktueren binne hoekpunten en rânen. Attributen binne eigenskippen fan hoekpunten en rânen. In ferbining is in ferbining fan hoekpunten.

Oars as oare gegevensmodellen, prioritearje grafykdatabases relaasjes tusken entiteiten. Dêrom is it net nedich om relaasjes te berekkenjen mei frjemde kaaien of op in oare manier. It is mooglik om komplekse gegevensmodellen te meitsjen mei allinich vertex- en râneabstraksjes.

Yn 'e hjoeddeiske wrâld fereasket modelearjen fan relaasjes hieltyd mear ferfine techniken. Om relaasjes te modellearjen, biedt SQL Server 2017 grafyske databankmooglikheden. De hoekpunten en rânen fan 'e grafyk wurde fertsjintwurdige as nije soarten tabellen: NODE en EDGE. Graph queries brûke in nije T-SQL funksje neamd MATCH (). Sûnt dizze funksjonaliteit is ynboud yn SQL Server 2017, kin it brûkt wurde yn jo besteande databases sûnder de needsaak foar databankkonverzje.

Foardielen fan it Graph Model

Tsjintwurdich freegje bedriuwen en brûkers applikaasjes dy't wurkje mei hieltyd mear gegevens, wylst se hege prestaasjes en betrouberens ferwachtsje. De grafyske werjefte fan gegevens biedt in handich middel foar it behanneljen fan komplekse relaasjes. Dizze oanpak lost in protte problemen op en helpt om resultaten te krijen binnen in bepaalde kontekst.

It liket derop dat in protte applikaasjes sille profitearje fan grafyske databases yn 'e takomst.

Gegevensmodellering: fan relaasje oant grafyske modeling

Yntroduksje ta SQL Server 2017 Graph Databases
Foarbyld:

Litte wy nei in foarbyld sjen fan in organisaasjestruktuer mei in hierargy fan meiwurkers: in meiwurker rapportearret oan in manager, in manager rapportearret oan in senior manager, ensfh. Ofhinklik fan it spesifike bedriuw kin d'r in oantal nivo's yn dizze hiërargy wêze. Mar as it oantal nivo's ferheget, wurdt it berekkenjen fan relaasjes yn in relationele databank hieltyd dreger. It is frij lestich om de hierargy fan meiwurkers, de hierargy yn marketing as sosjale mediaferbiningen foar te stellen. Litte wy sjen hoe't SQL Graph it probleem kin oplosse fan it behanneljen fan ferskate nivo's fan hierargy.

Litte wy foar dit foarbyld in ienfâldich gegevensmodel meitsje. Meitsje in tabel fan meiwurkers EMP mei id EMPNO en kolom M.G.R.A dy't wiist op de ID fan 'e haad (manager) fan' e meiwurker. Alle ynformaasje oer de hiërargy wurdt opslein yn dizze tabel en kin wurde frege mei help fan kolommen EMPNO и M.G.R..

Yntroduksje ta SQL Server 2017 Graph Databases
It folgjende diagram lit ek itselde org-diagrammodel sjen mei fjouwer nivo's fan nêst yn in mear fertroude foarm. Meiwurkers binne de hoekpunten fan 'e grafyk út' e tabel EMP. De entiteit "meiwurker" is keppele oan himsels troch de relaasje "yntsjinnet" (ReportsTo). Yn grafyske termen is in keppeling in râne (EDGE) dy't knooppunten (NODE's) fan meiwurkers ferbynt.

Yntroduksje ta SQL Server 2017 Graph Databases

Litte wy in gewoane tabel meitsje EMP en foegje dêr wearden ta neffens it diagram hjirboppe.

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)

De figuer hjirûnder lit de meiwurkers sjen:

  • wurknimmer mei EMPNO 7369 is ûndergeskikt oan 7902;
  • wurknimmer mei EMPNO 7902 ûndergeskikt oan 7566
  • wurknimmer mei EMPNO 7566 ûndergeskikt oan 7839

Yntroduksje ta SQL Server 2017 Graph Databases
Litte wy no sjen nei de foarstelling fan deselde gegevens yn 'e foarm fan in grafyk. De EMLOYEE-knooppunt hat ferskate attributen en is keppele oan himsels troch in "submits"-relaasje (EmplReportsTo). EmplReportsTo is de namme fan 'e relaasje.

De rânetafel (EDGE) kin ek attributen hawwe.

Yntroduksje ta SQL Server 2017 Graph Databases
Meitsje in knooppunt tabel EmpNode

De syntaksis foar it meitsjen fan in knooppunt is frij simpel: nei de útdrukking TAFEL meitsje tafoege oan 'e ein 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;

Litte wy no de gegevens konvertearje fan in gewoane tabel nei in grafyk. Folgjende YNFOEGJE foeget gegevens yn fan in relasjonele tabel EMP.

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

Yntroduksje ta SQL Server 2017 Graph Databases
Yn de node tabel yn in spesjale kolom $node_id_* de host-ID wurdt opslein as JSON. De oerbleaune kolommen fan dizze tabel befetsje de attributen fan it knooppunt.

Meitsje rânen (EDGE)

It meitsjen fan in râne tabel is hiel gelyk oan it meitsjen fan in knooppunt tabel, útsein dat it kaaiwurd AS EDGE.

CREATE TABLE empReportsTo(Deptno int) AS EDGE

Yntroduksje ta SQL Server 2017 Graph Databases

Litte wy no relaasjes definiearje tusken meiwurkers mei help fan kolommen EMPNO и M.G.R.. It org-diagram lit dúdlik sjen hoe't jo skriuwe YNFOEGJE.

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

De rânetabel hat standert trije kolommen. Earste, $edge_id - edge identifier yn 'e foarm fan JSON. De oare twa ($from_id и $to_id) fertsjintwurdigje de relaasje tusken knopen. Derneist kinne rânen ekstra eigenskippen hawwe. Yn ús gefal, dit Deptno.

Systeem Views

Yn systeem werjefte sys.tables Der binne twa nije kolommen:

  1. is_râne
  2. is_node

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

Yntroduksje ta SQL Server 2017 Graph Databases

ssms

Objekten yn ferbân mei grafiken lizze yn 'e map Graph Tables. De knooppunt tabel byldkaike is markearre mei in stip, en de râne tabel byldkaike is markearre mei twa ferbûn sirkels (dat liket in bytsje as bril).

Yntroduksje ta SQL Server 2017 Graph Databases

MATCH útdrukking

Utdrukking WEDSTRIID nommen út CQL (Cypher Query Language). Dit is in effisjinte manier om de eigenskippen fan in grafyk te freegjen. CQL begjint mei in útdrukking WEDSTRIID.

syntaksis

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

foarbylden

Litte wy nei in pear foarbylden sjen.

De query hjirûnder toant de meiwurkers oan wa't Smith en syn manager rapportearje.

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'

Yntroduksje ta SQL Server 2017 Graph Databases
De folgjende fraach is foar it finen fan meiwurkers en managers op twadde nivo foar Smith. As jo ​​fuortsmite it oanbod WÊR, dan wurde alle meiwurkers as gefolch werjûn.

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'

Yntroduksje ta SQL Server 2017 Graph Databases
En as lêste, in fersyk foar meiwurkers en managers op tredde nivo.

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'

Yntroduksje ta SQL Server 2017 Graph Databases
Litte wy no fan rjochting feroarje om de bazen fan Smith te krijen.

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)

Yntroduksje ta SQL Server 2017 Graph Databases

konklúzje

SQL Server 2017 hat himsels fêstige as in folsleine bedriuwsoplossing foar in ferskaat oan bedriuws-IT-behoeften. De earste ferzje fan SQL Graph is tige kânsryk. Sels nettsjinsteande guon beheiningen is d'r al genôch funksjonaliteit om de mooglikheden fan grafiken te ferkennen.

SQL Graph funksjonaliteit is folslein yntegrearre yn SQL Engine. Lykwols, lykas al neamd, hat SQL Server 2017 de folgjende beheiningen:

Gjin stipe foar polymorfisme.

  • Allinich unidirectional keppelings wurde stipe.
  • Rânen kinne har $from_id- en $to_id-kolommen net bywurkje fia UPDATE.
  • Transitive slutingen wurde net stipe, mar se kinne wurde krigen mei CTE's.
  • Beheinde stipe foar OLTP-objekten yn it ûnthâld.
  • Tydlike tabellen (Systeem-ferzjes Temporal Table), tydlike lokale en globale tabellen wurde net stipe.
  • Tabeltypen en tabelfariabelen kinne net ferklearre wurde as NODE of EDGE.
  • Cross-database-fragen wurde net stipe.
  • D'r is gjin direkte manier of in soarte fan wizard (wizard) om reguliere tabellen te konvertearjen nei grafyktabellen.
  • D'r is gjin GUI om grafiken wer te jaan, mar Power BI kin brûkt wurde.

Yntroduksje ta SQL Server 2017 Graph Databases

Lês mear:

Boarne: www.habr.com

Add a comment