Uvod v baze podatkov grafov SQL Server 2017

Pred začetkom tečaja "MS SQL Server razvijalec" Za vas smo pripravili še en uporaben prevod.

Podatkovne baze grafov so pomembna tehnologija za strokovnjake za baze podatkov. Poskušam slediti novostim in novim tehnologijam na tem področju in po delu z relacijskimi in NoSQL podatkovnimi bazami vidim, da postaja vloga grafičnih podatkovnih baz vse večja. Pri delu s kompleksnimi hierarhičnimi podatki so neučinkovite ne le tradicionalne baze podatkov, ampak tudi NoSQL. Pogosto s povečanjem števila ravni povezav in velikosti baze podatkov pride do zmanjšanja zmogljivosti. In ko razmerja postanejo bolj zapletena, se poveča tudi število JOIN-jev.

Seveda v relacijskem modelu obstajajo rešitve za delo s hierarhijami (na primer z uporabo rekurzivnih CTE), vendar so to še vedno rešitve. Hkrati pa funkcionalnost podatkovnih baz grafov SQL Server olajša upravljanje več ravni hierarhije. Tako podatkovni model kot poizvedbe so poenostavljeni, s čimer se poveča njihova učinkovitost. Znatno zmanjša količino kode.

Podatkovne zbirke grafov so izrazen jezik za predstavitev kompleksnih sistemov. Ta tehnologija se že precej pogosto uporablja v industriji IT na področjih, kot so družbena omrežja, sistemi za boj proti goljufijam, analiza omrežij IT, socialna priporočila, priporočila za izdelke in vsebino.

Funkcionalnost baze podatkov grafov v strežniku SQL Server je primerna za scenarije, kjer so podatki zelo povezani in imajo dobro definirana razmerja.

Graf podatkovni model

Graf je množica vozlišč (vozlišča, vozlišče) in robov (relacije, rob). Točke predstavljajo entitete, robovi pa povezave, katerih atributi lahko vsebujejo informacije.

Baza podatkov grafov modelira entitete kot graf, kot je opredeljeno v teoriji grafov. Podatkovne strukture so vozlišča in robovi. Atributi so lastnosti oglišč in robov. Povezava je povezava vozlišč.

Za razliko od drugih podatkovnih modelov grafične baze podatkov dajejo prednost odnosom med entitetami. Zato ni potrebe po izračunavanju odnosov z uporabo tujih ključev ali na kakšen drug način. Možno je ustvariti kompleksne podatkovne modele z uporabo samo abstrakcij vozlišč in robov.

V današnjem svetu modeliranje odnosov zahteva vedno bolj izpopolnjene tehnike. Za modeliranje odnosov SQL Server 2017 ponuja zmožnosti baze podatkov grafov. Točke in robovi grafa so predstavljeni kot nove vrste tabel: NODE in EDGE. Grafske poizvedbe uporabljajo novo funkcijo T-SQL, imenovano MATCH(). Ker je ta funkcionalnost vgrajena v SQL Server 2017, jo je mogoče uporabiti v vaših obstoječih zbirkah podatkov brez potrebe po pretvorbi baze podatkov.

Prednosti modela Graph

Dandanes podjetja in uporabniki zahtevajo aplikacije, ki delujejo z vedno več podatki, obenem pa pričakujejo visoko zmogljivost in zanesljivost. Grafična predstavitev podatkov ponuja priročno sredstvo za obravnavanje kompleksnih odnosov. Ta pristop rešuje številne težave in pomaga doseči rezultate v danem kontekstu.

Videti je, da bodo številne aplikacije v prihodnosti imele koristi od podatkovnih zbirk grafov.

Podatkovno modeliranje: od relacijskega k grafičnemu modeliranju

Uvod v baze podatkov grafov SQL Server 2017
Primer

Oglejmo si primer organizacijske strukture s hierarhijo zaposlenih: zaposleni poroča vodji, vodja poroča višjemu vodji itd. V tej hierarhiji je lahko poljubno število stopenj, odvisno od posameznega podjetja. Ko pa se število ravni povečuje, postaja računanje odnosov v relacijski bazi podatkov vedno težje. Kar težko si je predstavljati hierarhijo zaposlenih, hierarhijo v marketingu ali povezavah na družbenih omrežjih. Poglejmo, kako lahko SQL Graph reši problem obravnavanja različnih ravni hierarhije.

Za ta primer izdelajmo preprost podatkovni model. Ustvarite tabelo zaposlenih EMP z id EMPNO in stolpec M.G.R.A, ki kaže na ID vodje (vodje) zaposlenega. Vse informacije o hierarhiji so shranjene v tej tabeli in jih je mogoče poizvedovati z uporabo stolpcev EMPNO и M.G.R..

Uvod v baze podatkov grafov SQL Server 2017
Naslednji diagram prikazuje tudi isti model organigrama s štirimi ravnmi gnezdenja v bolj znani obliki. Zaposleni so oglišča grafa iz tabele EMP. Entiteta "zaposleni" je sama s seboj povezana z razmerjem "oddaja" (ReportsTo). V grafičnem smislu je povezava rob (EDGE), ki povezuje vozlišča (NODE) ​​zaposlenih.

Uvod v baze podatkov grafov SQL Server 2017

Ustvarimo običajno tabelo EMP in tam dodajte vrednosti v skladu z zgornjim diagramom.

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)

Spodnja slika prikazuje zaposlene:

  • zaposleni z EMPNO 7369 je podrejen 7902;
  • zaposleni z EMPNO 7902 podrejen 7566
  • zaposleni z EMPNO 7566 podrejen 7839

Uvod v baze podatkov grafov SQL Server 2017
Zdaj pa si poglejmo predstavitev istih podatkov v obliki grafa. Vozlišče EMPLOYEE ima več atributov in je povezano s samim seboj z razmerjem "predloži" (EmplReportsTo). EmplReportsTo je ime razmerja.

Robna miza (EDGE) ima lahko tudi atribute.

Uvod v baze podatkov grafov SQL Server 2017
Ustvarite tabelo vozlišč EmpNode

Sintaksa za ustvarjanje vozlišča je precej preprosta: do izraza USTVARI TABELO dodano na konec KOT VOZLIŠČE.

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 pa pretvorimo podatke iz navadne tabele v grafično. Naslednji INSERT vstavi podatke iz relacijske tabele EMP.

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

Uvod v baze podatkov grafov SQL Server 2017
V tabeli vozlišč v posebnem stolpcu $node_id_* ID gostitelja je shranjen kot JSON. Preostali stolpci te tabele vsebujejo atribute vozlišča.

Ustvari robove (EDGE)

Ustvarjanje robne tabele je zelo podobno ustvarjanju vozliščne tabele, razen ključne besede KOT ROB.

CREATE TABLE empReportsTo(Deptno int) AS EDGE

Uvod v baze podatkov grafov SQL Server 2017

Zdaj pa definirajmo odnose med zaposlenimi s pomočjo stolpcev EMPNO и M.G.R.. Organizacijska shema jasno kaže, 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);

Robna tabela ima privzeto tri stolpce. Prvič, $edge_id — identifikator roba v obliki JSON. Druga dva ($from_id и $to_id) predstavljajo razmerje med vozlišči. Poleg tega imajo lahko robovi dodatne lastnosti. V našem primeru to Deptno.

Sistemski pogledi

V sistemskem pogledu sys.tables Obstajata dva nova stolpca:

  1. je_rob
  2. je_vozlišče

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

Uvod v baze podatkov grafov SQL Server 2017

ssms

Objekti, povezani z grafi, se nahajajo v mapi Tabele grafov. Ikona tabele vozlišč je označena s piko, ikona tabele robov pa je označena z dvema povezanima krogcema (kar izgleda kot očala).

Uvod v baze podatkov grafov SQL Server 2017

izraz MATCH

Izraz MATCH povzeto iz CQL (Cypher Query Language). To je učinkovit način za poizvedovanje o lastnostih grafa. CQL se začne z 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

Primeri

Poglejmo si nekaj primerov.

Spodnja poizvedba prikazuje zaposlene, ki jim poročata Smith in njegov vodja.

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 v baze podatkov grafov SQL Server 2017
Naslednja poizvedba je namenjena iskanju zaposlenih in vodij druge stopnje za Smith. Če odstranite ponudbo KJE, potem bodo kot rezultat prikazani vsi zaposleni.

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 v baze podatkov grafov SQL Server 2017
In na koncu še zahteva za zaposlene in vodje tretje stopnje.

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 v baze podatkov grafov SQL Server 2017
Zdaj pa spremenimo smer, da dobimo Smithove šefe.

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 v baze podatkov grafov SQL Server 2017

Zaključek

SQL Server 2017 se je uveljavil kot popolna poslovna rešitev za različne poslovne IT potrebe. Prva različica SQL Graph je zelo obetavna. Kljub nekaterim omejitvam je že dovolj funkcionalnosti za raziskovanje možnosti grafov.

Funkcionalnost SQL Graph je popolnoma integrirana v SQL Engine. Vendar, kot že omenjeno, ima SQL Server 2017 naslednje omejitve:

Ni podpore za polimorfizem.

  • Podprte so samo enosmerne povezave.
  • Robovi ne morejo posodobiti svojih stolpcev $from_id in $to_id prek UPDATE.
  • Prehodna zapiranja niso podprta, vendar jih je mogoče pridobiti s CTE.
  • Omejena podpora za objekte OLTP v pomnilniku.
  • Začasne tabele (System-Versioned Temporal Table), začasne lokalne in globalne tabele niso podprte.
  • Tipov tabel in spremenljivk tabel ni mogoče deklarirati kot NODE ali EDGE.
  • Poizvedbe med bazami podatkov niso podprte.
  • Ne obstaja neposreden način ali nekakšen čarovnik (čarovnik) za pretvorbo običajnih tabel v grafične tabele.
  • Za prikaz grafov ni grafičnega uporabniškega vmesnika, lahko pa uporabite Power BI.

Uvod v baze podatkov grafov SQL Server 2017

Preberi več:

Vir: www.habr.com

Dodaj komentar