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 hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster