Uvod u SQL Server 2017 Graph baze podataka

Prije početka tečaja "MS SQL Server Developer" Za vas smo pripremili još jedan koristan prijevod.

Grafičke baze podataka važna su tehnologija za stručnjake za baze podataka. Trudim se pratiti inovacije i nove tehnologije u ovom području i, nakon rada s relacijskim i NoSQL bazama podataka, vidim da uloga graf baza podataka postaje sve važnija. Pri radu sa složenim hijerarhijskim podacima neučinkovite su ne samo tradicionalne baze podataka, već i NoSQL. Često, kako se povećava broj razina veze i veličina baze podataka, performanse se smanjuju. Kako odnosi postaju složeniji, povećava se i broj JOIN-ova.

Naravno, relacijski model ima rješenja za rad s hijerarhijama (na primjer, korištenjem rekurzivnih CTE-ova), ali to su još uvijek zaobilazna rješenja. U isto vrijeme, funkcionalnost baza podataka s grafikonima SQL Servera omogućuje vam jednostavno rukovanje višestrukim razinama hijerarhije. I model podataka i upiti su pojednostavljeni, a time i njihova učinkovitost. Količina koda je značajno smanjena.

Grafičke baze podataka izražajan su jezik za predstavljanje složenih sustava. Ova se tehnologija već prilično široko koristi u IT industriji u područjima kao što su društvene mreže, sustavi protiv prijevara, analiza IT mreža, društvene preporuke, preporuke proizvoda i sadržaja.

Funkcionalnost baze podataka grafikona u SQL Serveru prikladna je za scenarije u kojima su podaci visoko međusobno povezani i imaju dobro definirane odnose.

Grafički model podataka

Graf je skup vrhova (čvorova) i rubova (odnosa, ruba). Vrhovi predstavljaju entitete, a rubovi odnose čiji atributi mogu sadržavati informacije.

Baza podataka grafova modelira entitete kao graf kako je definirano u teoriji grafova. Strukture podataka su vrhovi i bridovi. Atributi su svojstva vrhova i bridova. Veza je veza vrhova.

Za razliku od drugih modela podataka, baze podataka grafikona daju prioritet odnosima između entiteta. Stoga nema potrebe izračunavati odnose korištenjem stranih ključeva ili bilo kojeg drugog sredstva. Moguće je izraditi složene modele podataka koristeći samo apstrakcije vrhova i rubova.

U suvremenom svijetu modeliranje odnosa zahtijeva sve složenije tehnike. Za modeliranje odnosa, SQL Server 2017 nudi mogućnosti baze podataka grafikona. Vrhovi i rubovi grafa predstavljeni su kao nove vrste tablica: NODE i EDGE. Grafovi upiti koriste novu T-SQL funkciju pod nazivom MATCH(). Budući da je ova funkcionalnost ugrađena u SQL Server 2017, može se koristiti u vašim postojećim bazama podataka bez potrebe za bilo kakvom pretvorbom.

Prednosti graf modela

Danas tvrtke i korisnici zahtijevaju aplikacije koje obrađuju sve više i više podataka, dok očekuju visoku izvedbu i pouzdanost. Predstavljanje podataka u obliku grafikona nudi prikladan način rukovanja složenim odnosima. Ovaj pristup rješava mnoge probleme i pomaže u postizanju rezultata u datom kontekstu.

Čini se da će mnoge aplikacije imati koristi od upotrebe baza podataka s grafikonima u budućnosti.

Modeliranje podataka: od relacijskog do graf modela

Uvod u SQL Server 2017 Graph baze podataka
Primjer

Pogledajmo primjer organizacijske strukture s hijerarhijom zaposlenika: zaposlenik je odgovoran menadžeru, menadžer je odgovoran višem menadžeru i tako dalje. Ovisno o konkretnoj tvrtki, može postojati bilo koji broj razina u ovoj hijerarhiji. Ali kako se broj razina povećava, izračunavanje odnosa u relacijskoj bazi podataka postaje sve teže. Prilično je teško zamisliti hijerarhiju zaposlenika, hijerarhiju u marketingu ili veze na društvenim mrežama. Pogledajmo kako SQL Graph može riješiti problem rukovanja različitim razinama hijerarhije.

Za ovaj primjer napravit ćemo jednostavan model podataka. Kreirajmo tablicu zaposlenika EMP s osobnom iskaznicom EMPNO i stupac M.G.R., koji označava identifikator nadređenog (menadžera) zaposlenika. Sve informacije o hijerarhiji pohranjene su u ovoj tablici i mogu se postavljati upiti pomoću stupaca EMPNO и M.G.R..

Uvod u SQL Server 2017 Graph baze podataka
Sljedeći dijagram prikazuje isti model organizacijske strukture s četiri razine ugniježđenja u poznatijem obliku. Zaposlenici su vrhovi grafa iz tablice EMP. Entitet “zaposlenik” povezan je sam sa sobom vezom “podnosi” (ReportsTo). U smislu grafa, veza je rub (EDGE) koji povezuje čvorove (NODE) ​​​​zaposlenika.

Uvod u SQL Server 2017 Graph baze podataka

Napravimo običnu tablicu EMP i tamo dodajte vrijednosti u skladu s gornjim dijagramom.

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)

Na slici ispod prikazani su zaposlenici:

  • djelatnik sa EMPNO 7369 pokorava se 7902;
  • djelatnik sa EMPNO 7902 poštuje 7566
  • djelatnik sa EMPNO 7566 poštuje 7839

Uvod u SQL Server 2017 Graph baze podataka
Sada pogledajmo grafički prikaz istih podataka. Vertex EMPLOYEE ima nekoliko atributa i povezan je sam sa sobom odnosom “podređeni” (EmplReportsTo). EmplReportsTo je naziv odnosa.

Rubna tablica (EDGE) također može sadržavati atribute.

Uvod u SQL Server 2017 Graph baze podataka
Kreirajmo tablicu čvorova EmpNode

Sintaksa za stvaranje čvora je prilično jednostavna: do izraza IZRADI TABELU dodaje se na kraj "KAO ČVOR".

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

Pretvorimo sada podatke iz obične tablice u grafikon. Sljedeći INSERT umeće podatke iz relacijske tablice EMP.

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

Uvod u SQL Server 2017 Graph baze podataka
U tablici čvorova u posebnom stupcu $node_id_* identifikator čvora pohranjuje se kao JSON. Preostali stupci ove tablice sadrže atribute čvora.

Stvaranje rubova (EDGE)

Stvaranje rubne tablice vrlo je slično stvaranju tablice čvorova, osim što se koristi ključna riječ "KAO RUB".

CREATE TABLE empReportsTo(Deptno int) AS EDGE

Uvod u SQL Server 2017 Graph baze podataka

Sada definirajmo veze između zaposlenika pomoću stupaca EMPNO и M.G.R.. Dijagram organizacijske strukture jasno pokazuje kako pisati 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);

Zadana rubna tablica sastoji se od tri stupca. Prvi, $edge_id — identifikator ruba u JSON obliku. Druga dva ($from_id и $to_id) predstavljaju vezu između čvorova. Osim toga, rubovi mogu imati dodatna svojstva. U našem slučaju jest Deptno.

Prikazi sustava

U prikazu sustava sys.tables pojavile su se dvije nove rubrike:

  1. je_rub
  2. je_čvor

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

Uvod u SQL Server 2017 Graph baze podataka

ssms

Objekti koji se odnose na grafove nalaze se u mapi Tablice grafova. Ikona tablice čvorova označena je točkom, a ikona tablice rubova označena je s dva spojena kružića (što pomalo liči na naočale).

Uvod u SQL Server 2017 Graph baze podataka

MATCH izraz

izraz MATCH preuzeto iz CQL (Cypher Query Language). Ovo je učinkovit način za ispitivanje svojstava grafa. CQL počinje izrazom MATCH.

sintaksa

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

Primjeri

Pogledajmo nekoliko primjera.

Upit u nastavku prikazuje zaposlenike kojima Smith i njegov upravitelj odgovaraju.

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'

Uvod u SQL Server 2017 Graph baze podataka
Sljedeći upit je za pronalaženje zaposlenika druge razine i menadžera za Smith. Ako uklonite rečenicu GDJE, tada će rezultat prikazati sve zaposlenike.

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'

Uvod u SQL Server 2017 Graph baze podataka
I na kraju zahtjev za zaposlenike i menadžere treće razine.

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'

Uvod u SQL Server 2017 Graph baze podataka
Sada promijenimo smjer da uhvatimo Smithove šefove.

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)

Uvod u SQL Server 2017 Graph baze podataka

Zaključak

SQL Server 2017 etablirao se kao cjelovito poslovno rješenje za različite IT poslovne zadatke. Prva verzija SQL Grapha je vrlo obećavajuća. Čak i unatoč nekim ograničenjima, već postoji dovoljno funkcionalnosti za istraživanje mogućnosti grafikona.

Funkcionalnost SQL Graph-a potpuno je integrirana u SQL Engine. Međutim, kao što je već navedeno, SQL Server 2017 ima sljedeća ograničenja:

Nema podrške za polimorfizam.

  • Podržane su samo jednosmjerne veze.
  • Rubovi ne mogu ažurirati stupce $from_id i $to_id putem UPDATE.
  • Prijelazna zatvaranja nisu podržana, ali se mogu dobiti pomoću CTE-a.
  • Podrška za In-Memory OLTP objekte je ograničena.
  • Vremenske tablice (vremenska tablica s verzijom sustava), privremene lokalne i globalne tablice nisu podržane.
  • Vrste tablica i varijable tablice ne mogu se deklarirati kao NODE ili EDGE.
  • Upiti između baza podataka nisu podržani.
  • Ne postoji izravan način ili čarobnjak za pretvaranje uobičajenih tablica u tablice grafikona.
  • Ne postoji GUI za prikaz grafikona, ali možete koristiti Power BI.

Uvod u SQL Server 2017 Graph baze podataka

Čitaj više:

Izvor: www.habr.com

Dodajte komentar