Sissejuhatus SQL Server 2017 graafikute andmebaasidesse

Enne kursuse algust MS SQL Serveri arendaja Oleme teile valmistanud veel ühe kasuliku tõlke.

Graafikandmebaasid on andmebaasiprofessionaalide jaoks oluline tehnoloogia. Püüan jälgida selle valdkonna uuendusi ja uusi tehnoloogiaid ning pärast relatsiooni- ja NoSQL-andmebaasidega töötamist näen, et graafikuandmebaaside roll muutub üha suuremaks. Keeruliste hierarhiliste andmetega töötamisel ei ole mitte ainult traditsioonilised andmebaasid, vaid ka NoSQL ebaefektiivsed. Sageli väheneb jõudlus lingitasemete arvu ja andmebaasi suuruse suurenemisega. Ja kui suhted muutuvad keerukamaks, suureneb ka JOIN-ide arv.

Muidugi on relatsioonimudelis lahendusi hierarhiatega töötamiseks (näiteks rekursiivsete CTE-de kasutamine), kuid need on siiski lahendused. Samal ajal muudab SQL Serveri graafikuandmebaaside funktsionaalsus mitme hierarhiataseme haldamise lihtsaks. Nii andmemudel kui ka päringud on lihtsustatud ja seetõttu suureneb nende tõhusus. Vähendab oluliselt koodi hulka.

Graafikandmebaasid on väljendusrikas keel keeruliste süsteemide esitamiseks. Seda tehnoloogiat kasutatakse IT-tööstuses juba üsna laialdaselt sellistes valdkondades nagu sotsiaalvõrgustikud, pettusevastased süsteemid, IT-võrkude analüüs, sotsiaalsed soovitused, toote- ja sisusoovitused.

SQL Serveri graafikuandmebaasi funktsionaalsus sobib stsenaariumide jaoks, kus andmed on omavahel tihedalt seotud ja neil on täpselt määratletud seosed.

Graafiku andmemudel

Graaf on tippude (sõlmede, sõlmede) ja servade (seosed, serv) kogum. Tipud tähistavad üksusi ja servad linke, mille atribuudid võivad sisaldada teavet.

Graafikandmebaas modelleerib olemeid graafikuna, nagu on määratletud graafiteoorias. Andmestruktuurid on tipud ja servad. Atribuudid on tippude ja servade omadused. Ühendus on tippude ühendus.

Erinevalt teistest andmemudelitest seavad graafikuandmebaasid esikohale olemitevahelised suhted. Seetõttu ei ole vaja suhteid arvutada võõrvõtmete abil või muul viisil. On võimalik luua keerulisi andmemudeleid kasutades ainult tippude ja servade abstraktsioone.

Tänapäeva maailmas nõuab suhete modelleerimine üha keerukamaid tehnikaid. Seoste modelleerimiseks pakub SQL Server 2017 graafikuandmebaasi võimalusi. Graafi tipud ja servad on kujutatud uut tüüpi tabelitena: NODE ja EDGE. Graafikupäringud kasutavad uut T-SQL-i funktsiooni nimega MATCH(). Kuna see funktsioon on sisse ehitatud SQL Server 2017-sse, saab seda kasutada olemasolevates andmebaasides, ilma et oleks vaja andmebaasi teisendada.

Graafikumudeli eelised

Tänapäeval nõuavad ettevõtted ja kasutajad rakendusi, mis töötavad üha rohkemate andmetega, eeldades samas suurt jõudlust ja töökindlust. Andmete graafiline esitus pakub mugavat vahendit keerukate suhete käsitlemiseks. See lähenemisviis lahendab palju probleeme ja aitab saavutada tulemusi antud kontekstis.

Näib, et paljud rakendused saavad tulevikus graafikuandmebaasidest kasu.

Andmete modelleerimine: relatsioonist graafilise modelleerimiseni

Sissejuhatus SQL Server 2017 graafikute andmebaasidesse
Näide

Vaatame näidet töötajate hierarhiaga organisatsioonistruktuurist: töötaja annab aru juhile, juht kõrgemale juhile jne. Olenevalt konkreetsest ettevõttest võib selles hierarhias olla suvaline arv tasemeid. Kuid tasemete arvu suurenedes muutub seoste arvutamine relatsiooniandmebaasis üha keerulisemaks. Üsna raske on ette kujutada töötajate hierarhiat, hierarhiat turunduses või sotsiaalmeedia ühendustes. Vaatame, kuidas SQL Graph suudab lahendada erinevate hierarhiatasemete käsitlemise probleemi.

Selle näite jaoks koostame lihtsa andmemudeli. Koostage töötajate tabel EMP ID-ga EMPNO ja veerg M.G.R.A, mis osutab töötaja juhi (juhi) isikutunnistusele. Kogu teave hierarhia kohta on salvestatud sellesse tabelisse ja seda saab veergude abil küsida EMPNO и M.G.R..

Sissejuhatus SQL Server 2017 graafikute andmebaasidesse
Järgmine diagramm näitab ka sama organisatsioonidiagrammi mudelit nelja pesastamistasemega tuttavamal kujul. Töötajad on graafiku tipud tabelist EMP. Üksus "töötaja" on endaga seotud suhtega "esitab" (ReportsTo). Graafiku terminites on link serv (EDGE), mis ühendab töötajate sõlme (sõlmed).

Sissejuhatus SQL Server 2017 graafikute andmebaasidesse

Koostame tavalise tabeli EMP ja lisage sinna väärtused vastavalt ülaltoodud diagrammile.

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)

Alloleval joonisel on näidatud töötajad:

  • töötajaga EMPNO 7369 on 7902 alluvus;
  • töötajaga EMPNO 7902 alluv 7566-le
  • töötajaga EMPNO 7566 alluv 7839-le

Sissejuhatus SQL Server 2017 graafikute andmebaasidesse
Nüüd vaatame samade andmete esitamist graafiku kujul. Sõlmel TÖÖTAJA on mitu atribuuti ja see on endaga seotud "esitab" seosega (EmplReportsTo). EmplReportsTo on suhte nimi.

Servatabelil (EDGE) võivad samuti olla atribuudid.

Sissejuhatus SQL Server 2017 graafikute andmebaasidesse
Looge sõlmetabel EmpNode

Sõlme loomise süntaks on üsna lihtne: väljendile LOE TABEL lõppu lisatud KUI SÕLM.

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

Teisendame nüüd andmed tavalisest tabelist graafikuteks. Edasi INSERT lisab andmed relatsioonitabelist EMP.

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

Sissejuhatus SQL Server 2017 graafikute andmebaasidesse
Sõlme tabelis spetsiaalses veerus $node_id_* hosti ID salvestatakse JSON-ina. Selle tabeli ülejäänud veerud sisaldavad sõlme atribuute.

Loo servad (EDGE)

Servatabeli loomine on väga sarnane sõlmetabeli loomisega, välja arvatud märksõna SERVNA.

CREATE TABLE empReportsTo(Deptno int) AS EDGE

Sissejuhatus SQL Server 2017 graafikute andmebaasidesse

Nüüd määratleme töötajatevahelised suhted veergude abil EMPNO и M.G.R.. Organisatsiooniskeem näitab selgelt, kuidas kirjutada 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);

Servatabelil on vaikimisi kolm veergu. Esiteks $edge_id — serva identifikaator JSON-vormingus. Teised kaks ($from_id и $to_id) tähistavad sõlmede vahelist suhet. Lisaks võivad servadel olla täiendavaid omadusi. Meie puhul see Deptno.

Süsteemivaated

Süsteemivaates sys.tables Seal on kaks uut veergu:

  1. on_serv
  2. on_sõlm

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

Sissejuhatus SQL Server 2017 graafikute andmebaasidesse

ssms

Graafikutega seotud objektid asuvad kaustas Graafikutabelid. Sõlmetabeli ikoon on tähistatud punktiga ja servatabeli ikoon on tähistatud kahe ühendatud ringiga (mis näeb välja nagu prillid).

Sissejuhatus SQL Server 2017 graafikute andmebaasidesse

MATCH väljend

Väljendus MATCH võetud CQL-ist (Cypher Query Language). See on tõhus viis graafiku omaduste päringu tegemiseks. CQL algab avaldisega MATCH.

süntaks

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

näited

Vaatame mõnda näidet.

Allolev päring kuvab töötajad, kellele Smith ja tema juht aru annavad.

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'

Sissejuhatus SQL Server 2017 graafikute andmebaasidesse
Järgmine päring on Smithile töötajate ja teise taseme juhtide leidmiseks. Kui eemaldate pakkumise KUS, siis kuvatakse selle tulemusel kõik töötajad.

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'

Sissejuhatus SQL Server 2017 graafikute andmebaasidesse
Ja lõpuks palve kolmanda taseme töötajatele ja juhtidele.

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'

Sissejuhatus SQL Server 2017 graafikute andmebaasidesse
Nüüd muudame suunda, et saada Smithi ülemused.

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)

Sissejuhatus SQL Server 2017 graafikute andmebaasidesse

Järeldus

SQL Server 2017 on end tõestanud tervikliku ettevõttelahendusena mitmesuguste äri IT-vajaduste jaoks. SQL Graphi esimene versioon on väga paljutõotav. Isegi vaatamata mõningatele piirangutele on graafikute võimaluste uurimiseks juba piisavalt funktsionaalsust.

SQL Graphi funktsionaalsus on täielikult integreeritud SQL Engine'i. Kuid nagu juba mainitud, on SQL Server 2017-l järgmised piirangud.

Pole toetust polümorfismile.

  • Toetatakse ainult ühesuunalisi linke.
  • Edges ei saa värskendada oma veerge $from_id ja $to_id UPDATE kaudu.
  • Transitiivseid sulgemisi ei toetata, kuid neid saab hankida CTE-de abil.
  • Piiratud tugi mälusiseste OLTP-objektide jaoks.
  • Ajutisi tabeleid (System-Versioned Temporal Table), ajutisi kohalikke ja globaalseid tabeleid ei toetata.
  • Tabelitüüpe ja tabelimuutujaid ei saa deklareerida kui NODE või EDGE.
  • Andmebaasiüleseid päringuid ei toetata.
  • Tavaliste tabelite graafiktabeliteks teisendamiseks pole otsest viisi ega mingit viisardit (viisardit).
  • Graafikute kuvamiseks pole GUI-d, kuid kasutada saab Power BI-d.

Sissejuhatus SQL Server 2017 graafikute andmebaasidesse

Loe rohkem:

Allikas: www.habr.com

Lisa kommentaar