Uvod u grafične baze podataka SQL Server 2017

Pred začetkom tečaja „MS SQL Server Developer“ pripremili smo još jedan koristan prevod.

Grafične baze podataka su važna tehnologija za stručnjake za baze podataka. Trudim se da pratim inovacije i nove tehnologije u ovoj oblasti i, nakon rada sa relacijskim i NoSQL bazama podataka, vidim da uloga grafičnih baza postaje sve značajnija. U radu sa složenim hijerarhijskim podacima, tradicionalne baze podataka, ali i NoSQL, pokazuju nedovoljnu efikasnost. Često, kako se povećava broj nivoa odnosa i veličina baze, dolazi do smanjenja performansi. A kako se međuzavisnosti komplikuju, tako se povećava i broj JOIN-a.

Naravno, u relacijskom modelu postoje rešenja za rad sa hijerarhijama (na primer, korišćenjem rekurzivnih CTE), ali to su i dalje zaobilazna rešenja. U tom smislu, funkcionalnost grafičnih baza podataka SQL Server omogućava lako obrađivanje više nivoa hijerarhije. Time se pojednostavljuju i model podataka i upiti, čime se povećava njihova efikasnost. Znatno se smanjuje obim koda.

Grafične baze podataka predstavljaju izražajan jezik za predstavljanje složenih sistema. Ova tehnologija se već prilično široko koristi u IT industriji u oblastima kao što su društvene mreže, anti-fraud sistemi, analiza IT mreža, društvene preporuke, preporuke proizvoda i sadržaja.

Funkcionalnost grafičnih baza podataka u SQL Server-u je pogodna za scenarije u kojima su podaci snažno međusobno povezani i imaju jasno definisane veze.

Grafički model podataka

Graf predstavlja skup čvorova (node) i ivica (edge). Čvorovi predstavljaju entitete, a ivice predstavljaju veze, u atributima kojih može biti sadržana informacija.

Grafička baza podataka modelira entitete u obliku grafa kako je to definisano u teoriji grafova. Strukture podataka su čvorovi i ivice. Atributi su svojstva čvorova i ivica. Veza predstavlja povezivanje čvorova.

Za razliku od drugih modela podataka, u grafičkim bazama podataka prioritet imaju međuzavisnosti između entiteta. Stoga nije potrebno izračunavati veze putem stranih ključeva ili nekim drugim metodama. Mogu se kreirati složeni modeli podataka koristeći samo apstrakcije čvorova i ivica.

V sodobnem svetu modeliranje povezav zahteva vedno bolj zapletene metode. Za modeliranje povezav SQL Server 2017 ponuja možnosti grafičnih podatkovnih baz. Vrhovi in robovi grafa se predstavljajo v obliki novih tipov tabel: NODE in EDGE. Za poizvedbe v grafu se uporablja nova funkcija T-SQL, imenovana MATCH(). Ker je ta funkcionalnost vgrajena v SQL Server 2017, jo lahko uporabite v vaših obstoječih podatkovnih bazah brez potrebe po kakršnikoli konverziji.

Koristi grafičnega modela

Danes poslovanje in uporabniki zahtevajo aplikacije, ki delujejo z vedno večjimi količinami podatkov, hkrati pa pričakujejo visoko zmogljivost in zanesljivost. Predstavitev podatkov v obliki grafa ponuja priročna orodja za obdelavo zapletenih povezav. Ta pristop omogoča reševanje mnogih težav in pomaga pri pridobivanju rezultatov v okviru določenega konteksta.

Sodeč po vsem, bodo v prihodnosti mnoge aplikacije lahko koristile uporabo grafičnih podatkovnih baz.

Modeliranje podatkov: od relacijske do grafične

Uvod u grafične baze podataka SQL Server 2017
Primer

Poglejmo primer organizacijske strukture z hierarhijo zaposlenih: zaposleni poroča menedžerju, menedžer pa višjemu menedžerju in tako naprej. Glede na konkretno podjetje je lahko v tej hierarhiji poljubno število ravni. Vendar pa z naraščanjem števila ravni postane računalniška povezava v relacijski bazi podatkov vse težja. V njej je precej zapleteno predstaviti hierarhijo zaposlenih, hierarhijo v marketingu ali povezave v družbenih omrežjih. Poglejmo, kako lahko s SQL Graph rešimo težave pri obdelavi različnih ravni hierarhije.

Za ta primer bomo ustvarili preprost model podatkov. Ustvarili bomo tabelo zaposlenih EMP z identifikatorjem EMPNO in stolpcem MGR, ki kaže na identifikator nadrejenega (menedžerja) zaposlenega. Vse informacije o hierarhiji so shranjene v tej tabeli in jih je mogoče poizvedovati s pomočjo stolpcev. EMPNO in MGR.

Uvod u grafične baze podataka SQL Server 2017
Na naslednjem diagramu je prikazan isti model organske strukture s štirimi ravnmi v bolj znani obliki. Zaposleni so vrhovi grafa iz tabele EMP. Entiteta 'zaposleni' je povezana sama s seboj s povezavo 'poroča'. V izrazih grafa je povezava rob (EDGE), ki povezuje vozlišča (NODE) zaposlenih.

Uvod u grafične baze podataka SQL Server 2017

Ustvarimo običajno tabelo EMP in dodajmo vanj vrednosti v skladu z zgoraj prikazano diagramo.

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 spodnji sliki so prikazani zaposleni:

  • zaposleni s EMPNO 7369 poroča 7902;
  • zaposleni s EMPNO 7902 poroča 7566
  • zaposleni s EMPNO 7566 poroča 7839

Uvod u grafične baze podataka SQL Server 2017
Zdaj pa si poglejmo predstavitev istih podatkov v obliki grafa. Vrh EMPLOYEE ima več atributov in je povezan sam s seboj z relacijo "poroča" (EmplReportsTo). EmplReportsTo je ime relacije.

V tabeli robov (EDGE) so lahko prav tako prisotni atributi.

Uvod u grafične baze podataka SQL Server 2017
Ustvarimo tabelo vozlišč EmpNode

Sintaksa za ustvarjanje vozlišča je precej preprosta: k izjavi CREATE TABLE se na konec doda "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;

Zdaj bomo podatke iz običajne tabele pretvorili v graf. Naslednji INSERT vstavlja podatke iz relacijske tabele EMP.

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

Uvod u grafične baze podataka SQL Server 2017
V tabeli vozlišč v posebni koloni $node_id_* se hrani identifikator vozlišča v obliki JSON. V ostalih stolpcih te tabele so atributi vozlišča.

Ustvarimo robove (EDGE)

Ustvarjanje tabele robov je zelo podobno ustvarjanju tabele vozlišč, razen da se uporablja ključno besedo "AS EDGE".

CREATE TABLE empReportsTo(Deptno int) AS EDGE

Uvod u grafične baze podataka SQL Server 2017

Zdaj opredelimo povezave med zaposlenimi, uporabimo stolpce EMPNO in MGR. Na diagramu organske strukture je dobro vidno, kako zapisati 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);

Prednostna tabela robov se sestavlja iz treh stolpcev. Prvi, $edge_id — identifikator roba v obliki JSON. Druga dva ($from_id in $to_id) predstavljata povezavo med vozlišči. Poleg tega lahko robovi vsebujejo dodatne lastnosti. V našem primeru je to Deptno.

Sistemski prikazi

V sistemskem prikazu sys.tables so se pojavili dve novi stolpci:

  1. is_edge
  2. is_node

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

Uvod u grafične baze podataka SQL Server 2017

SSMS

Objekti, povezani z grafi, so shranjeni v mapi Graf Tabele. Ikona tabele vozlišč je označena s piko, tabela robov — z dvema povezanima kroglama (kar nekoliko spominja na očala).

Uvod u grafične baze podataka SQL Server 2017

Izraz MATCH

Izraz MATCH je prevzet iz CQL (Cypher Query Language). To je učinkovit način poizvedovanja po lastnostih grafa. CQL se začne z izrazom MATCH.

Syntax

MATCH ()
 
::=
    { {
                 	{ <-(  )- }
               	| { -(  )-> }
             	
             	}
 	}
 	[ { AND } { (  ) } ]
 	[ ,...n ]
 
 ::=
    node_table_name | node_alias
 
 ::=
    edge_table_name | edge_alias

Primeri

Poglejmo nekaj primerov.

Zgornja poizvedba prikazuje zaposlene, ki so podrejeni Smithu in njegovemu menedžerju.

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 grafične baze podataka SQL Server 2017
Следующий запрос предназначен для поиска сотрудников и менеджеров второго уровня для Smith. Если убрать предложение WHERE, то в результате будут отображаться все сотрудники.

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 grafične baze podataka SQL Server 2017
И, наконец, запрос для сотрудников и менеджеров третьего уровня.

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 grafične baze podataka SQL Server 2017
Теперь давайте изменим направление, чтобы получить начальников Smith’а.

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 grafične baze podataka SQL Server 2017

Zaključek

SQL Server 2017 зарекомендовал себя как полноценное корпоративное решение для различных ИТ-задач бизнеса. Первая версия SQL Graph очень многообещающая. Даже несмотря на некоторые ограничения, уже сейчас есть достаточно функционала для изучения возможностей графов.

Функционал SQL Graph полностью интегрирован в SQL Engine. Однако, как уже было сказано, в SQL Server 2017 есть следующие ограничения:

Нет поддержки полиморфизма.

  • Поддерживаются только однонаправленные связи.
  • У ребер нельзя обновлять столбцы $from_id и $to_id через UPDATE.
  • Не поддерживаются транзитивные замыкания (transitive closure), но их можно получить с помощью CTE.
  • Ограничена поддержка объектов In-Memory OLTP.
  • Не поддерживаются темпоральные таблицы (System-Versioned Temporal Table), временные локальные и глобальные таблицы.
  • Табличные типы и табличные переменные не могут быть объявлены как NODE или EDGE.
  • Не поддерживаются запросы между базами данных (cross-database queries).
  • Нет прямого способа или какого-то мастера (wizard) для преобразования обычных таблиц в графовые.
  • Для отображения графов нет GUI, но можно использовать Power BI.

Uvod u grafične baze podataka SQL Server 2017

Preberi več:

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster