Úvod do grafových databáz SQL Server 2017

Pred začiatkom kurzu "MS SQL Server Developer" Pripravili sme pre vás ďalší užitočný preklad.

Grafové databázy sú dôležitou technológiou pre databázových profesionálov. Snažím sa držať krok s inováciami a novými technológiami v tejto oblasti a po práci s relačnými a NoSQL databázami vidím, že úloha grafových databáz je čoraz dôležitejšia. Pri práci s komplexnými hierarchickými dátami sú neefektívne nielen tradičné databázy, ale aj NoSQL. Často, keď sa zvyšuje počet úrovní pripojenia a veľkosť databázy, výkon klesá. A ako sa vzťahy stávajú zložitejšími, zvyšuje sa aj počet JOINov.

Samozrejme, relačný model má riešenia pre prácu s hierarchiami (napríklad pomocou rekurzívnych CTE), ale stále ide o riešenia. Funkcionalita databáz grafov SQL Server vám zároveň umožňuje jednoducho zvládnuť viacero úrovní hierarchie. Dátový model aj dotazy sú zjednodušené, a preto sa zvyšuje ich efektivita. Množstvo kódu je výrazne znížené.

Grafové databázy sú expresívnym jazykom na reprezentáciu zložitých systémov. Táto technológia je už pomerne široko používaná v IT priemysle v oblastiach, ako sú sociálne siete, systémy boja proti podvodom, analýza IT sietí, sociálne odporúčania, odporúčania produktov a obsahu.

Funkcionalita grafovej databázy v SQL Serveri je vhodná pre scenáre, kde sú dáta vysoko prepojené a majú dobre definované vzťahy.

Grafový dátový model

Graf je množina vrcholov (uzlov) a hrán (vzťahy, hrana). Vrcholy predstavujú entity a hrany predstavujú vzťahy, ktorých atribúty môžu obsahovať informácie.

Databáza grafov modeluje entity ako graf, ako je definované v teórii grafov. Dátové štruktúry sú vrcholy a hrany. Atribúty sú vlastnosti vrcholov a hrán. Spojenie je spojenie vrcholov.

Na rozdiel od iných dátových modelov, grafové databázy uprednostňujú vzťahy medzi entitami. Preto nie je potrebné počítať vzťahy pomocou cudzích kľúčov alebo iných prostriedkov. Je možné vytvárať komplexné dátové modely iba pomocou vrcholových a okrajových abstrakcií.

V modernom svete si modelovanie vzťahov vyžaduje čoraz zložitejšie techniky. Na modelovanie vzťahov ponúka SQL Server 2017 funkcie grafovej databázy. Vrcholy a hrany grafu sú reprezentované ako nové typy tabuliek: NODE a EDGE. Grafové dotazy používajú novú funkciu T-SQL s názvom MATCH(). Keďže táto funkcia je zabudovaná do SQL Server 2017, možno ju použiť vo vašich existujúcich databázach bez potreby akejkoľvek konverzie.

Výhody grafového modelu

Firmy a používatelia dnes požadujú aplikácie, ktoré zvládajú čoraz viac údajov, pričom očakávajú vysoký výkon a spoľahlivosť. Reprezentácia údajov vo forme grafu ponúka pohodlný prostriedok na zvládnutie zložitých vzťahov. Tento prístup rieši mnohé problémy a pomáha dosiahnuť výsledky v danom kontexte.

Zdá sa, že mnohé aplikácie budú v budúcnosti využívať výhody grafových databáz.

Dátové modelovanie: od relačného po grafový model

Úvod do grafových databáz SQL Server 2017
Príklad

Pozrime sa na príklad organizačnej štruktúry s hierarchiou zamestnancov: zamestnanec sa hlási manažérovi, manažér sa hlási vyššiemu manažérovi atď. V závislosti od konkrétnej spoločnosti môže byť v tejto hierarchii ľubovoľný počet úrovní. Ale so zvyšujúcim sa počtom úrovní je výpočet vzťahov v relačnej databáze čoraz ťažší. Je dosť ťažké predstaviť si hierarchiu zamestnancov, hierarchiu v marketingu či prepojenia na sociálnych sieťach. Pozrime sa, ako môže SQL Graph vyriešiť problém spracovania rôznych úrovní hierarchie.

Pre tento príklad vytvoríme jednoduchý dátový model. Vytvorme si tabuľku zamestnancov EMP s ID EMPNO a stĺpec M.G.R., s uvedením identifikátora nadriadeného zamestnanca (manažéra). Všetky informácie o hierarchii sú uložené v tejto tabuľke a možno ich vyhľadávať pomocou stĺpcov EMPNO и M.G.R..

Úvod do grafových databáz SQL Server 2017
Nasledujúci diagram zobrazuje rovnaký model organizačnej štruktúry so štyrmi úrovňami vnorenia v známejšej forme. Zamestnanci sú vrcholy grafu z tabuľky EMP. Entita „zamestnanec“ je sama so sebou spojená spojením „submits“ (ReportsTo). Z hľadiska grafu je odkaz hranou (EDGE), ktorá spája uzly (NODE) ​​zamestnancov.

Úvod do grafových databáz SQL Server 2017

Vytvorme si bežnú tabuľku EMP a pridajte tam hodnoty podľa vyššie uvedeného diagramu.

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)

Nasledujúci obrázok zobrazuje zamestnancov:

  • zamestnanec s EMPNO 7369 poslúcha 7902;
  • zamestnanec s EMPNO 7902 poslúchne 7566
  • zamestnanec s EMPNO 7566 poslúchne 7839

Úvod do grafových databáz SQL Server 2017
Teraz sa pozrime na grafovú reprezentáciu tých istých údajov. Vrchol EMPLOYEE má niekoľko atribútov a je sám so sebou spojený vzťahom „podriadení“ (EmplReportsTo). EmplReportsTo je názov vzťahu.

Tabuľka okrajov (EDGE) môže tiež obsahovať atribúty.

Úvod do grafových databáz SQL Server 2017
Vytvorme tabuľku uzlov EmpNode

Syntax na vytvorenie uzla je celkom jednoduchá: k výrazu VYTVORIŤ TABUĽKU sa pridáva na koniec "AKO UZOL".

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

Teraz prevedieme údaje z bežnej tabuľky na grafovú. Ďalšie INSERT vkladá údaje z relačnej tabuľky EMP.

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

Úvod do grafových databáz SQL Server 2017
V tabuľke uzlov v špeciálnom stĺpci $node_id_* identifikátor uzla je uložený ako JSON. Zvyšné stĺpce tejto tabuľky obsahujú atribúty uzla.

Vytváranie hrán (EDGE)

Vytvorenie tabuľky okrajov je veľmi podobné vytváraniu tabuľky uzlov, až na to, že sa použije kľúčové slovo "AKO OKRAJ".

CREATE TABLE empReportsTo(Deptno int) AS EDGE

Úvod do grafových databáz SQL Server 2017

Teraz definujme prepojenia medzi zamestnancami pomocou stĺpcov EMPNO и M.G.R.. Schéma organizačnej štruktúry jasne ukazuje, ako písať 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);

Predvolená tabuľka okrajov pozostáva z troch stĺpcov. Najprv, $edge_id — identifikátor hrany vo forme JSON. Ďalšie dve ($from_id и $to_id) predstavujú spojenie medzi uzlami. Okrem toho môžu mať hrany ďalšie vlastnosti. V našom prípade je Deptno.

Systémové zobrazenia

V systémovom zobrazení sys.tables objavili sa dva nové stĺpce:

  1. is_edge
  2. is_node

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

Úvod do grafových databáz SQL Server 2017

ssms

Objekty súvisiace s grafmi sa nachádzajú v priečinku Tabuľky grafov. Ikona tabuľky uzlov je označená bodkou a ikona tabuľky okrajov je označená dvoma spojenými kruhmi (trochu ako okuliare).

Úvod do grafových databáz SQL Server 2017

MATCH výraz

vyjadrenie MATCH prevzaté z CQL (Cypher Query Language). Toto je efektívny spôsob dotazovania na vlastnosti grafu. CQL začína výrazom MATCH.

syntax

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

príklady

Pozrime sa na niekoľko príkladov.

Dotaz nižšie zobrazuje zamestnancov, ktorým Smith a jeho manažér podliehajú.

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'

Úvod do grafových databáz SQL Server 2017
Nasledujúci dotaz slúži na nájdenie zamestnancov a manažérov druhej úrovne pre Smith. Ak odstránite vetu KDE, potom sa vo výsledku zobrazia všetci zamestnanci.

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'

Úvod do grafových databáz SQL Server 2017
A na záver žiadosť pre zamestnancov a manažérov tretieho stupňa.

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'

Úvod do grafových databáz SQL Server 2017
Teraz zmeňme smer, aby sme získali Smithových šéfov.

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)

Úvod do grafových databáz SQL Server 2017

Záver

SQL Server 2017 sa etabloval ako kompletné podnikové riešenie pre rôzne úlohy v oblasti IT. Prvá verzia SQL Graph je veľmi sľubná. Aj napriek určitým obmedzeniam už existuje dostatok funkcií na preskúmanie možností grafov.

Funkcia SQL Graph je plne integrovaná do SQL Engine. Ako však už bolo uvedené, SQL Server 2017 má nasledujúce obmedzenia:

Žiadna podpora polymorfizmu.

  • Podporované sú iba jednosmerné pripojenia.
  • Edge nemôže aktualizovať stĺpce $from_id a $to_id prostredníctvom UPDATE.
  • Tranzitívne uzávery nie sú podporované, ale možno ich získať pomocou CTE.
  • Podpora objektov OLTP v pamäti je obmedzená.
  • Dočasné tabuľky (System-Versioned Temporal Table), dočasné lokálne a globálne tabuľky nie sú podporované.
  • Typy tabuliek a premenné tabuľky nemožno deklarovať ako NODE alebo EDGE.
  • Dopyty medzi databázami nie sú podporované.
  • Neexistuje žiadny priamy spôsob alebo sprievodca na konverziu bežných tabuliek na tabuľky grafov.
  • Neexistuje žiadne grafické rozhranie na zobrazenie grafov, ale môžete použiť službu Power BI.

Úvod do grafových databáz SQL Server 2017

Čítaj viac:

Zdroj: hab.com

Pridať komentár