Uvod u SQL Server 2017 Graph baze podataka

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

Grafičke baze podataka su važna tehnologija za stručnjake za baze podataka. Trudim se da budem u toku sa inovacijama i novim tehnologijama u ovoj oblasti i, nakon rada sa relacionim i NoSQL bazama podataka, vidim da uloga baza podataka grafova postaje sve važnija. Kada radite sa složenim hijerarhijskim podacima, nisu samo tradicionalne baze podataka neefikasne, već i NoSQL. Često, kako se povećava broj nivoa veze i veličina baze podataka, performanse se smanjuju. A kako odnosi postaju složeniji, povećava se i broj JOIN-ova.

Naravno, relacijski model ima rješenja za rad sa hijerarhijama (na primjer, korištenjem rekurzivnih CTE-ova), ali to su još uvijek zaobilazna rješenja. Istovremeno, funkcionalnost SQL Server baza podataka grafova omogućava vam da lako rukujete više nivoa hijerarhije. I model podataka i upiti su pojednostavljeni, a samim tim se povećava njihova efikasnost. Količina koda je značajno smanjena.

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

Funkcionalnost baze podataka grafova u SQL Serveru je pogodna 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 ivica (odnosa, ivica). Vrhovi predstavljaju entitete, a ivice predstavljaju odnose čiji atributi mogu sadržavati informacije.

Baza podataka grafova modelira entitete kao graf kao što je definisano u teoriji grafova. Strukture podataka su vrhovi i ivice. Atributi su svojstva vrhova i ivica. Veza je veza vrhova.

Za razliku od drugih modela podataka, baze podataka grafova daju prioritet odnosima između entiteta. Stoga, nema potrebe za izračunavanjem odnosa korištenjem stranih ključeva ili bilo kojeg drugog načina. Moguće je kreirati složene modele podataka koristeći samo apstrakcije vrhova i rubova.

U modernom svijetu modeliranje odnosa zahtijeva sve složenije tehnike. Za modeliranje odnosa, SQL Server 2017 nudi mogućnosti baze podataka grafova. Vrhovi i ivice grafa su predstavljeni kao novi tipovi tabela: ČVOR i EDGE. Grafički 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 konverzijom.

Prednosti modela grafa

Danas preduzeća i korisnici zahtijevaju aplikacije koje rukuju sve više i više podataka, očekujući visoke performanse i pouzdanost. Predstavljanje podataka kao graf nudi pogodno sredstvo za rukovanje 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 korištenja baza podataka grafova u budućnosti.

Modeliranje podataka: od relacionog do grafičkog modela

Uvod u SQL Server 2017 Graph baze podataka
Primjer:

Pogledajmo primjer organizacione strukture sa hijerarhijom zaposlenih: zaposleni podnosi izvještaje menadžeru, menadžer izvještaje višem menadžeru itd. U zavisnosti od konkretne kompanije, može postojati bilo koji broj nivoa u ovoj hijerarhiji. Ali kako se broj nivoa povećava, izračunavanje odnosa u relacionoj bazi podataka postaje sve teže. Prilično je teško zamisliti hijerarhiju zaposlenih, hijerarhiju u marketingu ili veze na društvenim mrežama. Pogledajmo kako SQL Graph može riješiti problem rukovanja različitim nivoima hijerarhije.

Za ovaj primjer napravit ćemo jednostavan model podataka. Kreirajmo tabelu zaposlenih PMS sa ličnom kartom EMPNO i kolona M.G.R., sa naznakom identifikatora nadređenog (menadžera) zaposlenog. Sve informacije o hijerarhiji pohranjene su u ovoj tabeli i mogu se tražiti pomoću kolona EMPNO и M.G.R..

Uvod u SQL Server 2017 Graph baze podataka
Sljedeći dijagram prikazuje isti model organizacijske strukture sa četiri nivoa ugniježđenja u poznatijem obliku. Zaposleni su vrhovi grafa iz tabele PMS. Entitet “zaposleni” povezan je sa samim sobom vezom “submits” (ReportsTo). U smislu grafa, veza je ivica (EDGE) koja povezuje čvorove (NODE) ​​zaposlenih.

Uvod u SQL Server 2017 Graph baze podataka

Kreirajmo običan sto PMS i dodajte vrijednosti u skladu sa 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 su zaposleni:

  • zaposlenik sa EMPNO 7369 sluša 7902;
  • zaposlenik sa EMPNO 7902 sluša 7566
  • zaposlenik sa EMPNO 7566 sluša 7839

Uvod u SQL Server 2017 Graph baze podataka
Pogledajmo sada grafički prikaz istih podataka. Verteks ZAPOSLENI ima nekoliko atributa i povezan je sa samim sobom relacijom "podređeni" (EmplReportsTo). EmplReportsTo je naziv odnosa.

Tablica rubova (EDGE) također može sadržavati atribute.

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

Sintaksa za kreiranje čvora je prilično jednostavna: do izraza IZRADI TABELU se dodaje 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;

Sada da konvertujemo podatke iz obične tabele u tabelu grafikona. Sljedeći INSERT umeće podatke iz relacione tabele PMS.

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

Uvod u SQL Server 2017 Graph baze podataka
U tabeli čvorova u posebnoj koloni $node_id_* identifikator čvora je pohranjen kao JSON. Preostale kolone ove tabele sadrže atribute čvora.

Kreiranje ivica (EDGE)

Kreiranje ivice tabele je veoma slično kreiranju tabele čvorova, osim što se koristi ključna reč "KAO Ivica".

CREATE TABLE empReportsTo(Deptno int) AS EDGE

Uvod u SQL Server 2017 Graph baze podataka

Sada definišimo veze između zaposlenih pomoću kolona EMPNO и M.G.R.. Dijagram organizacijske strukture jasno pokazuje kako se piše 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 tablica rubova sastoji se od tri kolone. prvo, $edge_id — identifikator ruba u JSON obliku. Druga dva ($from_id и $to_id) predstavljaju vezu između čvorova. Osim toga, ivice mogu imati dodatna svojstva. U našem slučaju jeste Deptno.

System Views

U sistemskom prikazu sys.tables pojavile su se dvije nove kolone:

  1. is_edge
  2. is_č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 povezani sa grafovima nalaze se u fascikli Graph Tables. Ikona tabele čvorova označena je tačkom, a ikona tabele sa ivicama je označena sa dva povezana kruga (što pomalo liči na naočare).

Uvod u SQL Server 2017 Graph baze podataka

MATCH izraz

Izraz MATCH preuzeto iz CQL (Cypher Query Language). Ovo je efikasan način za ispitivanje svojstava grafa. CQL počinje sa 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 ispod prikazuje zaposlenike kojima Smith i njegov menadžer 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 i menadžera drugog nivoa za Smith. Ako uklonite rečenicu GDJE, tada će rezultat prikazati sve zaposlene.

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 zaposlenima i menadžerima trećeg nivoa.

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 dobijemo 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 se etablirao kao kompletno poslovno rješenje za različite IT poslovne zadatke. Prva verzija SQL Grapha je vrlo obećavajuća. Čak i uprkos nekim ograničenjima, već postoji dovoljno funkcionalnosti za istraživanje mogućnosti grafova.

SQL Graph funkcionalnost je u potpunosti integrirana u SQL Engine. Međutim, kao što je već rečeno, SQL Server 2017 ima sljedeća ograničenja:

Nema podrške za polimorfizam.

  • Podržane su samo jednosmjerne veze.
  • Ivice ne mogu ažurirati $from_id i $to_id kolone putem UPDATE.
  • Tranzitivna zatvaranja nisu podržana, ali se mogu dobiti pomoću CTE.
  • Podrška za OLTP objekte u memoriji je ograničena.
  • Privremene tabele (privremene tabele sa verzijom sistema), privremene lokalne i globalne tabele nisu podržane.
  • Tipovi tablica i varijable tablice ne mogu se deklarirati kao NODE ili EDGE.
  • Upiti među bazama podataka nisu podržani.
  • Ne postoji direktan način ili čarobnjak za pretvaranje regularnih tabela u tabele sa grafikonima.
  • 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