Sissejuhatus SQL Server 2017 graafikandmikesse

Kursuse alguse eelĂ”htul „MS SQL Serveri arendaja“ oleme teie jaoks valmistanud veel ĂŒhe kasuliku tĂ”lke.

Graafikandmed on andmebaasiekspertide jaoks tÀhtis tehnoloogia. JÀlgin pidevalt uusi innovatsioone ja tehnoloogiaid selles valdkonnas ning pÀrast tööd relatsiooniliste ja NoSQL andmebaasidega nÀen, et graafikandmete roll kasvab pidevalt. Kompleksete hierarhiliste andmete töötlemisel ei ole mitte ainult traditsioonilised andmebaasid, vaid ka NoSQL efektiivselt toimivad. Tihti, kui seoste tasemed ja andmebaasi suurus suurenevad, vÀheneb jÔudlus. SuhtlemisvÔrkude keerukus suurendab JOINide arvu.

Loomulikult on relatsioonilises mudelis lahendusi hierarhiatega töötamiseks (nt rekursiivsed CTE-d), kuid need jÀÀvad endiselt ringtee lahendusteks. Samas vÔimaldab SQL Serveri graafikandmete funktsionaalsus hÔlpsasti töödelda mitut hierarhiasuhet. Andmemudel ja pÀringud muutuvad lihtsamaks, seega tÔuseb nende efektiivsus. Koodi maht vÀheneb mÀrkimisvÀÀrselt.

Graafide andmebaasid on vĂ€ljendusrikas keel keerukate sĂŒsteemide esitlemiseks. Seda tehnoloogiat kasutatakse juba ĂŒsna laialdaselt IT-sektoris sellistes valdkondades nagu sotsiaalmeedia, pettusevastased sĂŒsteemid, IT-vĂ”rkude analĂŒĂŒs, sotsiaalsed soovitused ning toote- ja sisu soovitused.

SQL Serveri graafide andmebaasi funktsioon sobib stsenaariumidesse, kus andmed on omavahel tihedalt seotud ja neil on selgelt mÀÀratletud seosed.

Graafide andmemudel

Graaf on tipude (sÔlmede, node) ja servade (seoste, edge) kogum. Tipud esindavad entiteete ja servad seoseid, mille atribuudid vÔivad sisaldada teavet.

Graafide andmebaas modelleerib entiteete graafina, nagu on mÀÀratletud graafiateoorias. Andmestruktuurid on tipud ja servad. Atribuudid on tipude ja servade omadused. Seos on tipude ĂŒhendus.

Erinevalt teistest andmemudelitest on graafikute andmebaasides prioriteediks osaluste omavahelised seosed. SeetÔttu ei ole vaja seoseid arvutada vÀliste vÔtmete vÔi muude meetodite abil. Saate luua keerulisi andmemudeleid, kasutades ainult tippe ja servi abstraktsioonidena.

Kaasaegses maailmas nĂ”uab seoste modelleerimine ĂŒha keerukamaid meetodeid. SQL Server 2017 pakub graafikute andmebaaside vĂ”imalusi seoste modelleerimiseks. Graafi tipud ja servad esitatakse uutena tabelitĂŒĂŒpidena: NODE ja EDGE. Graafile pĂ€ringute tegemiseks kasutatakse uut T-SQL funktsiooni nimega MATCH(). Kuna see funktsionaalsus on sisse ehitatud SQL Server 2017, saab seda kasutada teie olemasolevates andmebaasides ilma nende konverteerimiseta.

Graafikute mudeli kasutegur

Praegu nĂ”uavad ettevĂ”tted ja kasutajad rakendusi, mis suudavad hallata ĂŒha suuremat andmemahtu, samas oodates kĂ”rget jĂ”udlust ja usaldusvÀÀrsust. Andmete esitamine graafina pakub mugavaid vahendeid keeruliste seoste töötlemiseks. See lĂ€henemine aitab lahendada paljusid probleeme ning annab tulemusi kindlas kontekstis.

Tundub, et tulevikus saavad paljud rakendused kasu graafipÔhiste andmebaaside kasutamisest.

Andmemudeli loomine: suheline mudel graafimudeliks

Sissejuhatus SQL Server 2017 graafikandmikesse
NĂ€ide

Vaatame nĂ€idet organisatsioonilisest struktuurist, kus on töötajate hierarhia: töötaja allub juhile, juht vanemjuhile ning nii edasi. SĂ”ltuvalt konkreetsest ettevĂ”ttest vĂ”ib selles hierarhias olla erinev arv tasandeid. Kuid kui tasandite arv suureneb, muutub seoste arvutamine relatsioonilises andmebaasis ĂŒha keerulisemaks. On ĂŒsna keeruline esitada töötajate hierarhiat, turunduse hierarhiat vĂ”i suhteid sotsiaalmeedias. Vaatame, kuidas SQL Graph aitab lahendada erinevate hierarhiatasemete töötlemise probleemi.

Selle nÀite jaoks loome lihtsa andmemudeli. Loome töötajate tabeli EMP identifikaatoriga EMPNO ja veergudega MGR, mis viitab töötaja juhataja (juhi) identifikaatorile. KÔik hierarhia teave on salvestatud sellesse tabelisse ja seda saab pÀrida veergude kaudu. EMPNO ja MGR.

Sissejuhatus SQL Server 2017 graafikandmikesse
JĂ€rgmises joonises on kujutatud sama organisatsioonilise struktuuri mudelit nelja taseme sĂŒvenemisega tuttavamas vormis. Töötajad on graafiku tipud tabelist. EMP. Töötaja „employee” on seotud iseendaga suhtega „allub” (ReportsTo). Graafiteooria mĂ”istes on suhe – serv (EDGE), mis ĂŒhendab töötajate sĂ”lmeid (NODE).

Sissejuhatus SQL Server 2017 graafikandmikesse

Loo tavaline tabel EMP ja lisame sinna vÀÀrtused vastavalt ĂŒlaltoodud diagrammile.

Loo TABEL 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)

Allpool toodud joonisel on nÀidatud töötajad:

  • töötaja EMPNO 7369 allub 7902-le;
  • töötaja EMPNO 7902 allub 7566-le
  • töötaja EMPNO 7566 allub 7839-le.

Sissejuhatus SQL Server 2017 graafikandmikesse
NĂŒĂŒd vaatame neid andmeid graafina. Tipp EMPLOYEE omab mitmeid atribuute ja on omavahel seotud sidemete „alluvus“ (EmplReportsTo) kaudu. EmplReportsTo on sideme nimi.

Servade (EDGE) tabelis vÔivad samuti olla atribuute.

Sissejuhatus SQL Server 2017 graafikandmikesse
Loome sÔlmede tabeli EmpNode.

SĂ”lme loomise sĂŒntaks on ĂŒsna lihtne: vĂ€ljendi CREATE TABLE lĂ”ppu lisatakse „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;

NĂŒĂŒd muudame andmed tavalisest tabelist graafiks. JĂ€rgmine INSERT sisestab andmed relatsioonilisest tabelist. EMP.

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

Sissejuhatus SQL Server 2017 graafikandmikesse
SĂ”lmede tabelis on spetsiaalses veerus $node_id_* salvestatakse sĂ”lme identifikaator JSON-vormingus. ÜlejÀÀnud veergudes on selle tabeli sĂ”lme atribuudid.

Loome servad (EDGE).

Servade tabeli loomine on vĂ€ga sarnane sĂ”lmede tabeli loomisega, vĂ€lja arvatud see, et kasutatakse vĂ”ti sĂ”na „AS EDGE“..

CREATE TABLE empReportsTo(Deptno int) AS EDGE.

Sissejuhatus SQL Server 2017 graafikandmikesse

NĂŒĂŒd mÀÀratleme suhted töötajate vahel, kasutades veerge EMPNO ja MGR. Organisatsioonidiagrammil on selgelt nĂ€ha, 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);

Vaikimisi servide tabel koosneb kolmest veerust. Esimene, $edge_id — JSON-vormis servatuvastus. Kaks muud ($from_id ja $to_id) esindavad seost sĂ”lmede vahel. Lisaks vĂ”ivad servadel olla tĂ€iendavad omadused. Meie puhul on need Deptno.

SĂŒsteemi vaated

SĂŒsteemi vaates sys.tables ilmunud kaks uut veergu:

  1. is_edge
  2. is_node

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

Sissejuhatus SQL Server 2017 graafikandmikesse

SSMS

Graafikuga seotud objektid asuvad kaustas Graph Tables. SĂ”lmtabeli ikoonil on punkt ja servade tabelitel — kaks ĂŒhendatud ringi (mis meenutab veidi prille).

Sissejuhatus SQL Server 2017 graafikandmikesse

VĂ€ljend MATCH

VÀljend MATCH on pÀrit CQL-ist (Cypher Query Language). See on tÔhus viis graafi omaduste pÀrimiseks. CQL algab vÀljendiga 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 paar nÀidet.

Allolev pÀring nÀitab töötajaid, kelle alluvuses on Smith ja tema juht.

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 graafikandmikesse
JÀrgmine pÀring on mÔeldud töötajate ja keskastme juhtide leidmiseks Smithi jaoks. Kui eemaldada lause WHERE, kuvatakse 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 graafikandmikesse
Ja lÔpuks, pÀring töötajate ja kolmanda taseme juhtide jaoks.

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 graafikandmikesse
NĂŒĂŒd lĂ€heme suunda muutma, et leida Smithi ĂŒlemusi.

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 graafikandmikesse

KokkuvÔte

SQL Server 2017 on ennast tĂ”estanud kui tĂ€ielik ettevĂ”tte lahendus erinevate IT-ĂŒlesannete jaoks. Esimene versioon SQL Graph on vĂ€ga paljutĂ”otav. Hoolimata mĂ”nest piirangust on juba praegu piisavalt funktsionaalsust graafide vĂ”imaluste uurimiseks.

SQL Graph funktsioon on tÀielikult integreeritud SQL Engine'isse. Siiski, nagu juba mainitud, on SQL Server 2017-l jÀrgmised piirangud:

PolĂŒmorfismi toetamist ei ole.

  • Toetatakse ainult suunatud seoseid.
  • Kaartel ei saa vĂ€rskendada veerge $from_id ja $to_id UPDATE korral.
  • Transitiivsete sulgemiste toetamist ei ole, kuid neid saab saada CTE abil.
  • Toetamine In-Memory OLTP objektide jaoks on piiratud.
  • Temporaalsetel tabelitel (System-Versioned Temporal Table), ajutistel kohalikudel ja globaalsetel tabelitel toetamist ei ole.
  • Tabeli tĂŒĂŒpe ja tabeli muutujaid ei saa kuulutada NODE'iks ega EDGE'iks.
  • Andmebaaside vahelisi pĂ€ringuid (cross-database queries) ei toetata.
  • Puudub otsene viis vĂ”i mingisugune maagia (wizard) tavapĂ€raste tabelite konvertimiseks graafikuteks.
  • Graafikute kuvamiseks puudub GUI, kuid Power BI-d saab kasutada.

Sissejuhatus SQL Server 2017 graafikandmikesse

Loe edasi:

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster