Hyrje në bazat e të dhënave grafike SQL Server 2017

Në prag të fillimit të kursit «Zhvillues i MS SQL Server» kemi përgatitur për ju një tjetër përkthim të dobishëm.

Databaza grafike janë një teknologji e rëndësishme për specialistët e databazave. Unë përpiqem të ndjek inovacionet dhe teknologjitë e reja në këtë fushë dhe, pas punës me databaza relacionale dhe NoSQL, shoh se roli i databazave grafike po bëhet gjithnjë e më i rëndësishëm. Në punën me të dhëna të komplikuara hierarkike, jo vetëm që databazat tradicionale, por edhe NoSQL nuk janë të efektshme. Shpesh, me rritjen e numrit të niveleve të lidhjeve dhe madhësisë së databazës, vërehet një ulje e performancës. Dhe me ndërlikimin e ndërveprimeve, rritet gjithashtu numri i JOIN.

Sigurisht, në modelin relational ka zgjidhje për të punuar me hierarki (për shembull, përmes CTE-ve rekursive), por kjo mbetet ende një mënyrë anësore. Megjithatë, funksionaliteti i databazave grafike në SQL Server lejon që të trajtojmë lehtësisht disa nivele hierarkie. Bëhet më e thjeshtë si modeli i të dhënave ashtu edhe kërkesat, prandaj, rritet efikasiteti i tyre. Zmadhimi i kodit është shumë i reduktuar.

Databazat grafike janë një gjuhë ekspresive për të paraqitur sisteme të komplikuara. Kjo teknologji tashmë përdoret gjerësisht në industrinë e IT-së në fusha të tilla si rrjetet sociale, sistemet kundër mashtrimit, analiza e rrjeteve IT, rekomandimet sociale, rekomandimet për produkte dhe përmbajtje.

Funksionaliteti i databazave grafike në SQL Server është i përshtatshëm për skenarë ku të dhënat janë shumë të lidhura me njëra-tjetrën dhe kanë lidhje të qarta të përcaktuara.

Modeli i të dhënave grafike

Grafiku është një grup kulmash (nodos, node) dhe qoshe (lidhi, edge). Kulmash paraqesin entitete, ndërsa qoshet janë lidhjet, të cilat mund të përmbajnë informacione në atributet e tyre.

Një databazë grafike modelon entitetet si një graf në formën e përkufizuar në teorinë e grafëve. Strukturat e të dhënave janë kulmash dhe qoshe. Atributet janë pronat e kulmave dhe qosheve. Lidhja është një lidhje midis kulmave.

Kështu, ndryshe nga modelet e tjera të të dhënave, në databazat grafike prioriteti është lidhjet midis entiteteve. Prandaj, nuk ka nevojë të llogariten lidhjet përmes çelësave të jashtëm ose ndonjë mënyre tjetër. Mund të krijoni modele të komplikuara të të dhënave duke përdorur vetëm abstraksionet e kulmave dhe qosheve.

Në botën moderne, modelimi i lidhjeve kërkon metoda gjithnjë e më të komplikuara. Për modelimin e lidhjeve, SQL Server 2017 ofron mundësi të databazave grafike. Kulmash dhe qoshet e grafëve paraqiten si lloje të reja tabelash: NODE dhe EDGE. Për kërkesat në grafik përdoret një funksion i ri T-SQL i quajtur MATCH(). Duke qenë se ky funksionalitet është i integruar në SQL Server 2017, mund të përdoret në databazat tuaja ekzistuese pa pasur nevojë për ndonjë konvertim.

Përfitimi i modelit grafike

Aktualisht, bizneset dhe përdoruesit kërkojnë aplikacione që punojnë me volume gjithnjë e më të mëdha të të dhënave, duke pritur nga ana e tyre performancë të lartë dhe besueshmëri. Paraqitja e të dhënave në formën e grafit ofron mjete të përshtatshme për trajtimin e lidhjeve të komplikuara. Ky qasje lejon zgjidhjen e shumë problemeve dhe ndihmon në arritjen e rezultateve brenda kontekstit të caktuar.

Duket se në të ardhmen shumë aplikacione mund të përfitojnë nga përdorimi i databazave grafike.

Modelimi i të dhënave: nga modeli relational në atë grafik

Hyrje në bazat e të dhënave grafike SQL Server 2017
Shembuj

Le të shqyrtojmë një shembull të strukturës organizative me hierarkinë e punonjësve: një punonjës i përket menaxherit, menaxheri - menaxherit të lartë dhe kështu me radhë. Në varësi të kompanisë specifike, kjo hierarki mund të ketë cilin do numër nivelesh. Por me rritjen e numrit të niveleve, llogaritja e lidhjeve në databazën relacionale bëhet gjithnjë e më e komplikuar. Në të është mjaft e vështirë të paraqitet hierarkia e punonjësve, hierarkia në marketing ose lidhjet në rrjetet sociale. Le të shohim se si mund të zgjidhet problemi i trajtimit të niveleve të ndryshme të hierarkisë duke përdorur SQL Graph.

Për këtë shembull, do të krijojmë një model të thjeshtë të të dhënave. Do të krijojmë një tabelë punonjësish EMP me identifikuesin EMPNO dhe një kolonë MGR, që tregon identifikuesin e menaxherit të punonjësit. Të gjitha informacionet mbi hierarkinë ruhen në këtë tabelë dhe mund të kërkohen përmes kolonave EMPNO dhe MGR.

Hyrje në bazat e të dhënave grafike SQL Server 2017
Në diagramin e mëposhtëm paraqitet po e njëjta model strukturor me katër nivele të thellësisë në një formë më të njohur. Punonjësit janë kulma të grafit nga tabela EMP. Entiteti "punonjës" lidhet me vetveten përmes lidhjes "i raporton" (ReportsTo). Në terma grafike, lidhja është një qoshe (EDGE) që lidh kulmat (NODE) e punonjësve.

Hyrje në bazat e të dhënave grafike SQL Server 2017

Le të krijojmë një tabelë të zakonshme EMP dhe do ta shtojmë aty vlera sipas diagramës së mësipërme.

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)

Në ilustrimin e mësipërm janë të paraqitur punonjësit:

  • punonjĂ«si me EMPNO 7369 i raporton 7902;
  • punonjĂ«si me EMPNO 7902 i raporton 7566
  • punonjĂ«si me EMPNO 7566 i raporton 7839

Hyrje në bazat e të dhënave grafike SQL Server 2017
Tani le ta shohim përfaqësimin e të njëjtave të dhëna në formë grafike. Nodi EMPLOYEE ka disa atribute dhe lidhet me veten përmes lidhjes "raporton" (EmplReportsTo). EmplReportsTo është emri i lidhjes.

Në tabelën e skajve (EDGE) gjithashtu mund të kenë atribute.

Hyrje në bazat e të dhënave grafike SQL Server 2017
Le të krijojmë tabelën e nodëve EmpNode

Sintaksa e krijimit të një nodi është mjaft e thjeshtë: përjashtimi CREATE TABLE shtohet në fund "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;

Tani do ta konvertojmë të dhënat nga tabela standarde në tabela grafike. Tjetra INSERT e fut të dhënat nga tabela relacional EMP.

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

Hyrje në bazat e të dhënave grafike SQL Server 2017
Në tabelën e nodëve në një kolonë të veçantë $node_id_* ruhen identifikuesit e nodit në formë JSON. Në kolonat e tjera të kësaj tabele ndodhen atributet e nodit.

Krijojmë skajet (EDGE)

Krijimi i tabelës së skajve është shumë i ngjashëm me krijimin e tabelës së nodëve, përveçse përdoret fjala kyçe "AS EDGE".

CREATE TABLE empReportsTo(Deptno int) AS EDGE

Hyrje në bazat e të dhënave grafike SQL Server 2017

Tani le të përcaktojmë lidhjet midis punonjësve, duke përdorur kolonat EMPNO dhe MGR. Në diagramin e strukturës organizative është e qartë se si të shkruhet 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);

Tabela e skajve pĂ«r default pĂ«rbĂ«het nga tre kolona. E para, $edge_id — identifikuesi i skajit nĂ« formĂ« JSON. TĂ« dyja tĂ« tjerat ($from_id dhe $to_id) paraqesin lidhjen midis nodĂ«ve. PĂ«r mĂ« tepĂ«r, skajet mund tĂ« kenĂ« veti tĂ« tjera. NĂ« rastin tonĂ« Ă«shtĂ« Deptno.

Pamjet e sistemit

Në pamjen e sistemit sys.tables kanë dalë dy kolona të reja:

  1. is_edge
  2. is_node

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

Hyrje në bazat e të dhënave grafike SQL Server 2017

SSMS

Objektet e lidhura me grafikĂ«t shpĂ«rndahen nĂ« dosjen Graf Tabele. Ikona e tabelĂ«s sĂ« nodĂ«ve Ă«shtĂ« shĂ«nuar me njĂ« pikĂ«, ndĂ«rsa tabelat e skajve — me dy rretha tĂ« lidhur (çka duket pak si syze).

Hyrje në bazat e të dhënave grafike SQL Server 2017

Shprehja MATCH

Shprehja MATCH merret nga CQL (Cypher Query Language). Kjo është një mënyrë efikase për të kërkuar në atributet e grafikëve. CQL fillon me shprehjen MATCH.

Sintaksa

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

Shembuj

Le ta shohim disa shembuj.

Kërkesa e paraqitur më poshtë tregon punonjësit që raportojnë te Smith dhe menaxheri i tij.

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'

Hyrje në bazat e të dhënave grafike SQL Server 2017
Kërkesa tjetër është për të gjetur punonjësit dhe menaxherët e nivelit të dytë për Smith. Nëse hiqet fraza WHERE, atëherë rezultatet do të përfshijnë të gjithë punonjësit.

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'

Hyrje në bazat e të dhënave grafike SQL Server 2017
Dhe, përfundimisht, kërkesa për punonjësit dhe menaxherët e nivelit të tretë.

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'

Hyrje në bazat e të dhënave grafike SQL Server 2017
Tani, le të ndryshojmë drejtimin për të marrë shefat e Smith-it.

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)

Hyrje në bazat e të dhënave grafike SQL Server 2017

Përfundimi

SQL Server 2017 ka provuar veten si një zgjidhje të plotë për kërkesat e ndryshme IT të biznesit. Versioni i parë i SQL Graph është shumë premtues. Edhe pse ka disa kufizime, tashmë ka mjaft funksionalitet për të eksploruar mundësitë e grafikëve.

Funksionaliteti i SQL Graph është plotësisht i integruar në SQL Engine. Megjithatë, siç u tha tashmë, në SQL Server 2017 ka këto kufizime:

Nuk mbështetet polimorfizmi.

  • MbĂ«shteten vetĂ«m lidhje njĂ«drejtimĂ«she.
  • Nuk mund tĂ« pĂ«rditĂ«sohen kolona $from_id dhe $to_id pĂ«rmes UPDATE nĂ« skajet.
  • Nuk mbĂ«shteten mbylljet tranzitive (transitive closure), por ato mund tĂ« merren me CTE.
  • MbĂ«shtetja pĂ«r objektet In-Memory OLTP Ă«shtĂ« e kufizuar.
  • Nuk mbĂ«shteten tabelat temporale (System-Versioned Temporal Table), tabelat lokale dhe globale temporale.
  • Tipet e tabelave dhe variablet e tabelave nuk mund tĂ« shpallen si NODE ose EDGE.
  • Nuk mbĂ«shteten pyetjet ndĂ«rmjet bazave tĂ« tĂ« dhĂ«nave (cross-database queries).
  • Nuk ka njĂ« mĂ«nyrĂ« tĂ« drejtpĂ«rdrejtĂ« ose njĂ« wizard pĂ«r tĂ« transformuar tabelat e zakonshme nĂ« grafike.
  • Nuk ka GUI pĂ«r tĂ« ilustruar grafikĂ«t, por mund tĂ« pĂ«rdorni Power BI.

Hyrje në bazat e të dhënave grafike SQL Server 2017

Lexoni më shumë:

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster