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

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

Bazat e të dhënave grafike janë një teknologji e rëndësishme për specialistët e të dhënave. Unë përpiqem të ndjek inovacionet dhe teknologjitë e reja në këtë fushë dhe, pas punës me bazat e të dhënave relacionale dhe NoSQL, shoh se roli i bazave të të dhënave grafike po bëhet gjithnjë e më i rëndësishëm. Në punën me të dhëna komplekse hierarkike, jo vetëm bazat tradicionale të të dhënave janë të pavlefshme, por edhe NoSQL. Shpesh, me rritjen e numrit të niveleve të lidhjeve dhe përmasave të bazës, vërehet një rënie në performancë. Dhe me komplikimin e marrëdhënieve, rritet edhe numri i JOIN.

Sigurisht, në modelin relacionale ka zgjidhje për të punuar me hierarkitë (p.sh., me ndihmën e CTE-ve rekurzive), por kjo mbetet përsëri një rrugë anësore. Megjithatë, funksionaliteti i bazave të të dhënave grafike në SQL Server lejon që të përpunoni me lehtësi disa nivele të hierarkisë. Si modeli i të dhënave, ashtu edhe kërkesat thjeshtohen, dhe si rezultat, rritet efektiviteti i tyre. Volumi i kodit zvogëlohet ndjeshëm.

Bazat e të dhënave grafike janë një gjuhë shprehëse për të paraqitur sisteme komplekse. Kjo teknologji tashmë përdoret mjaft gjerësisht në industrinë IT në fusha të tilla si rrjetet sociale, sistemet anti-fraudë, analiza e rrjeteve IT, rekomandimet sociale, rekomandimet për produkte dhe përmbajtjen.

Funksionaliteti i bazave të të dhënave 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ë përcaktuara qartë.

Modeli graf i të dhënave

Grafi është një grup pikash (nivele, node) dhe skajesh (lidhjesh, edge). Pikat përfaqësojnë entitete, ndërsa skajet - lidhje, të cilat mund të përmbajnë informacion në atributet e tyre.

Një bazë e të dhënave grafike modelon entitetet në formën e grafit, ashtu siç përcaktohet në teorinë e grafëve. Strukturat e të dhënave janë pikat dhe skajet. Atributet janë pronësitë e pikave dhe skajeve. Lidhja është një lidhje midis pikave.

Ndryshe nga modelet e tjera të të dhënave, në bazat e të dhënave grafike, përparësi kanë lidhjet midis entiteteve. Pra, nuk është e nevojshme të llogariten lidhjet me ndihmën e çelësave të jashtëm ose me ndonjë mënyrë tjetër. Mund të krijoni modele të komplikuara të të dhënave duke përdorur vetëm abstraksionet e pikave dhe skajeve.

Në botën moderne, modelimi i marrëdhënieve kërkon metoda gjithnjë e më të ndërlikuara. Për modelimin e marrëdhënieve, SQL Server 2017 ofron mundësi nga bazat e të dhënave grafike. Nyjet dhe skajet e grafit paraqiten si lloje të reja tabelash: NODE dhe EDGE. Për pyetjet ndaj grafit përdoret funksioni i ri T-SQL i quajtur MATCH(). Duke qenë se kjo funksionalitet është e integruar në SQL Server 2017, ajo mund të përdoret në bazat tuaja ekzistuese të të dhënave pa pasur nevojë për ndonjë konvertim.

Përfitimi i modelit graf

Aktualisht, bizneset dhe përdoruesit kërkojnë aplikacione që punojnë me volume gjithnjë e më të mëdha të të dhënave, duke pritur njëkohësisht performancë të lartë dhe besueshmëri. Paraqitja e të dhënave në formën e grafikëve ofron mjete të përshtatshme për përpunimin e lidhjeve të ndërlikuara. Ky qasje lejon të zgjidhen shumë probleme dhe ndihmon në arritjen e rezultateve brenda një konteksti të caktuar.

Me sa duket, në të ardhmen shumë aplikacione do të përfitojnë nga përdorimi i bazave të të dhënave grafike.

Modelimi i të dhënave: nga modeli relacional në graf

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

Le të shqyrtojmë një shembull të strukturës organizative me një hierarki punonjësish: punonjësi është nën drejtimin e menaxherit, menaxheri - i menaxherit të lartë dhe kështu me radhë. Sipas kompanisë specifike, në këtë hierarki mund të ketë çdo numër niveli. Por me rritjen e numrit të niveleve, llogaritja e lidhjeve në një bazë të dhënash relacional bëhet gjithnjë e më e ndërlikuar. Është mjaft e vështirë të paraqitet hierarkia e punonjësve, hierarkia në marketing apo lidhjet në rrjetet sociale. Le të shohim si me SQL Graph mund të zgjidhet problemi i përpunimit të niveleve të ndryshme të hierarkisë.

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 kolonën MGR, e cila tregon identifikuesin e udhëheqësit (menaxherit) të punonjësit. Të gjitha informacionet mbi hierarkinë ruhen në këtë tabelë dhe mund të kërkohen përmes koloneve EMPNO dhe MGR.

Hyrje në bazat e të dhënave grafike SQL Server 2017
Në diagramin e mëposhtëm paraqitet të njëjtën model të strukturës organizative me katër nivele thellësie në një format më të njohur. Punonjësit janë nyjet e grafit nga tabela EMP. Entiteti "punonjës" është i lidhur me veten përmes lidhjes "nënshkruhet" (ReportsTo). Në terma të grafit, lidhja është një skaj (EDGE) që lidh nyjet (NODE) e punonjësve.

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

Le të krijojmë një tabelë të zakonshme EMP dhe të shtojmë aty vlerat në përputhje me diagramin e mësipërm.

KRIJONI TABELĂ EMP
(EMPNO INT NUK LEJOHET,
ENAME VARCHAR(20),
JOB VARCHAR(10),
MGR INT,
JOINDATE DATETIME,
SALARY DECIMAL(7, 2),
COMMISIION DECIMAL(7, 2),
DNO INT)

SHTO DETYRAT NË EMP VLERAT
(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ë figurën e mëposhtme shihen punonjësit:

  • punonjësi me EMPNO 7369 i nënshtrohet 7902;
  • punonjësi me EMPNO 7902 i nënshtrohet 7566
  • punonjësi me EMPNO 7566 i nënshtrohet 7839

Hyrje në bazat e të dhënave grafike SQL Server 2017
Tani le të shikojmë përfaqësimin e të dhënave të njëjta në formën e një grafi. Noda EMPLOYEE ka disa atribute dhe është e lidhur me veten me lidhjen 'nënshtruese' (EmplReportsTo). EmplReportsTo është emri i lidhjes.

Në tabelën e skajeve (EDGE) gjithashtu mund të jenë të pranishme atribute.

Hyrje në bazat e të dhënave grafike SQL Server 2017
Të krijojmë tabelën e nodave EmpNode

Sintaksa e krijimit të nodit është mjaft e thjeshtë: në shprehjen KRIJONI TABELĂ shtojmë në fund "SI NOD".

KRIJONI TABELĂ dbo.EmpNode(
ID Int Identity(1,1),
EMPNO NUMERIC(4) NUK LEJOHET,
ENAME VARCHAR(10),
MGR NUMERIC(4),
DNO INT
) SI NOD;

Tani do ta transformojmë të dhënat nga tabela e zakonshme në graf. Tjetra SHTO shton të dhënat nga tabela relacionale EMP.

SHTO NË EmpNode(EMPNO,ENAME,MGR,DNO) përzgjidhni empno,ename,MGR,dno nga emp

Hyrje në bazat e të dhënave grafike SQL Server 2017
Në tabelën e nodave në një kolonë speciale $node_id_* ruhet identifikuesi i nodit në formën JSON. Në kolonat e tjera të kësaj tabele gjenden atributet e nodit.

Krijojmë skaje (EDGE)

Krijimi i tabelës së skajeve është shumë i ngjashëm me krijimin e tabelës së nodave, përveç se përdoret fjala kyçe "SI EDGE".

KRIJONI TABELĂ empReportsTo(Deptno int) SI EDGE

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

Tani le të përcaktojmë lidhjet mes punonjësve duke përdorur kolonat EMPNO dhe MGR. Nga diagrami të strukturuar organizativ shumë mirë shihet se si të shkruhet SHTO.

FUTURE INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 1),
   	(SELECT $node_id FROM EmpNode WHERE id = 13),20);
FUTURE INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 2),
   	(SELECT $node_id FROM EmpNode WHERE id = 6),10);
FUTURE INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 3),
   	(SELECT $node_id FROM EmpNode WHERE id = 6),10)
FUTURE INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 4),
   	(SELECT $node_id FROM EmpNode WHERE id = 9),30);
FUTURE INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 5),
   	(SELECT $node_id FROM EmpNode WHERE id = 6),30);
FUTURE INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 6),
   	(SELECT $node_id FROM EmpNode WHERE id = 9),30);
FUTURE INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 7),
   	(SELECT $node_id FROM EmpNode WHERE id = 9),30);
FUTURE INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 8),
   	(SELECT $node_id FROM EmpNode WHERE id = 4),30);
FUTURE INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 9),
   	(SELECT $node_id FROM EmpNode WHERE id = 9),30);
FUTURE INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 10),
   	(SELECT $node_id FROM EmpNode WHERE id = 6),30);
FUTURE INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 11),
   	(SELECT $node_id FROM EmpNode WHERE id = 8),30);
FUTURE INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 12),
   	(SELECT $node_id FROM EmpNode WHERE id = 6),30);
FUTURE INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 13),
   	(SELECT $node_id FROM EmpNode WHERE id = 4),30);
FUTURE INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 14),
   	(SELECT $node_id FROM EmpNode WHERE id = 7),30);

Tabeli i kafazit standard përbëhet nga tre kolona. E para, $edge_id — identifikuesi i kafazit në formatin JSON. Dy të tjerë ($from_id dhe $to_id) përfaqësojnë lidhjen midis nyjeve. Përveç kësaj, kafazet mund të kenë karakteristika shtesë. Në rastin tonë, kjo është Deptno.

Pamjet sistematike

Në pamjen sistematike 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 grafet gjenden në dosjen Graf Tabela. Ikona e tabelës për nyjet shënohet me një pikë, ndërsa tabelat e kafazeve — me dy rrethe të lidhura (ç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). Ky është një mënyrë efektive për të kërkuar në pronat e grafit. CQL fillon me shprehjen MATCH.

Sintaksa

MATCH (<graph_search_pattern>)
 
<graph_search_pattern>::=
    {<node_alias> {
                 	{ <-( <edge_alias> )- }
               	| { -( <edge_alias> )-> }
             	<node_alias>
             	}
 	}
 	[ { AND } { ( <graph_search_pattern> ) } ]
 	[ ,...n ]
 
<node_alias> ::=
    emri_i_tabeles_nyjeve | alias_i_nyjes
 
<edge_alias> ::=
    emri_i_tabeles_kafazit | alias_i_kafazit

Shembuj

Le të shohim disa shembuj.

Kërkesa e treguar më poshtë tregon punonjësit që i raporton 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 në vijim është për të gjetur punonjës dhe menaxherë të nivelit të dytë për Smith. Nëse heqim fjalinë KU, rezultati do të shfaqë të gjithë punonjësit.

Zgjidhni
E.EMPNO,E.ENAME,E.MGR,E1.EMPNO,E1.ENAME,E1.MGR,E2.EMPNO,e2.ENAME,E2.MGR
PREJ
    empnode e, empnode e1, empReportsTo m ,empReportsTo m1, empnode e2
KU
    MATCH(e-(m)->e1-(m1)->e2)
DHE e.ENAME='SMITH'

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

Zgjidhni
E.EMPNO,E.ENAME,E.MGR,E1.EMPNO,E1.ENAME,E1.MGR,E2.EMPNO,e2.ENAME,E2.MGR,E3.EMPNO,e3.ENAME,E3.MGR
PREJ
    empnode e, empnode e1, empReportsTo m ,empReportsTo m1, empnode e2, empReportsTo M2, empnode e3
KU
    MATCH(e-(m)->e1-(m1)->e2-(m2)->e3)
DHE 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.

Zgjidhni
E.EMPNO,E.ENAME,E.MGR,E1.EMPNO,E1.ENAME,E1.MGR,E2.EMPNO,e2.ENAME,E2.MGR,E3.EMPNO,e3.ENAME,E3.MGR
PREJ
    empnode e, empnode e1, empReportsTo m ,empReportsTo m1, empnode e2, empReportsTo M2, empnode e3
KU
    MATCH(e<-(m)-e1<-(m1)-e2<-(m2)-e3)

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

Përfundim

SQL Server 2017 ka treguar se është një zgjidhje e plotë për kërkesa të ndryshme IT të bizneseve. Versioni i parë i SQL Graph është shumë premtues. Edhe pse ka disa kufizime, tani 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ç është thënë, në SQL Server 2017 ka këto kufizime:

Nuk mbështetet polimorfizmi.

  • Mbështeten vetëm lidhjet njëkahëshe.
  • Nuk mund të përmbahen kolonat $from_id dhe $to_id përmes UPDATE në skarë.
  • Nuk mbështeten mbylljet tranzitive (transitive closure), por ato mund të pajisen përmes CTE.
  • Mbështetje e kufizuar për objektet In-Memory OLTP.
  • Nuk mbështeten tabelat temporale (System-Versioned Temporal Table), si tabelat temporale lokale ashtu edhe ato globale.
  • Llojet e tabelave dhe variablat e tabelave nuk mund të shpallen si NODE ose EDGE.
  • Nuk mbështeten kërkesat ndërmjet databazave (cross-database queries).
  • Nuk ka një mënyrë të drejtpërdrejtë ose ndonjë asistent (wizard) për të konvertuar tabelat e zakonshme në tabela grafike.
  • Për paraqitjen e grafikëve nuk ka GUI, por mund të përdoret Power BI.

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

Lexoni më shumë:

Burimi: habr.com

Blini hostim të besueshëm për faqe interneti me mbrojtje DDoS, serverë VPS VDS 🔥 Blini hostim të besueshëm për faqe interneti me mbrojtje DDoS, serverë VPS VDS - ProHoster