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

Para fillimit të kursit Zhvilluesi i MS SQL Server Ne kemi përgatitur një tjetër përkthim të dobishëm për ju.

Bazat e të dhënave grafike janë një teknologji e rëndësishme për profesionistët e bazës së të dhënave. Përpiqem të ndjek risitë dhe teknologjitë e reja në këtë fushë dhe pasi punoj me bazat e të dhënave relacionale dhe NoSQL, shoh që roli i bazave të të dhënave grafike po bëhet gjithnjë e më i madh. Kur punoni me të dhëna komplekse hierarkike, jo vetëm bazat e të dhënave tradicionale, por edhe NoSQL janë joefektive. Shpesh, me një rritje të numrit të niveleve të lidhjeve dhe madhësisë së bazës së të dhënave, ka një rënie të performancës. Dhe ndërsa marrëdhëniet bëhen më komplekse, rritet edhe numri i JOIN-ve.

Sigurisht, në modelin relacional ka zgjidhje për të punuar me hierarki (për shembull, duke përdorur CTE-të rekursive), por këto janë ende zgjidhje. Në të njëjtën kohë, funksionaliteti i bazave të të dhënave grafike të SQL Server e bën të lehtë trajtimin e niveleve të shumta të hierarkisë. Si modeli i të dhënave ashtu edhe pyetjet janë thjeshtuar, dhe për këtë arsye efikasiteti i tyre rritet. Zvogëlon ndjeshëm sasinë e kodit.

Bazat e të dhënave grafike janë një gjuhë shprehëse për përfaqësimin e sistemeve komplekse. Kjo teknologji tashmë përdoret mjaft gjerësisht në industrinë e TI-së në fusha të tilla si rrjetet sociale, sistemet kundër mashtrimit, analiza e rrjeteve IT, rekomandimet sociale, rekomandimet e produkteve dhe përmbajtjes.

Funksionaliteti i bazës së të dhënave grafike në SQL Server është i përshtatshëm për skenarë ku të dhënat janë shumë të ndërlidhura dhe kanë marrëdhënie të mirëpërcaktuara.

Modeli i të dhënave të grafikut

Një grafik është një grup kulmesh (nyje, nyje) dhe skaje (marrëdhënie, skaj). Kulmet përfaqësojnë entitete, dhe skajet përfaqësojnë lidhje, atributet e të cilave mund të përmbajnë informacion.

Një bazë të dhënash grafike modelon entitetet si grafik siç përcaktohet në teorinë e grafikëve. Strukturat e të dhënave janë kulme dhe skaje. Atributet janë vetitë e kulmeve dhe skajeve. Një lidhje është një lidhje kulmesh.

Ndryshe nga modelet e tjera të të dhënave, bazat e të dhënave grafike i japin përparësi marrëdhënieve ndërmjet entiteteve. Prandaj, nuk ka nevojë të llogaritni marrëdhëniet duke përdorur çelësa të huaj ose në ndonjë mënyrë tjetër. Është e mundur të krijohen modele komplekse të të dhënave duke përdorur vetëm abstraksione të kulmeve dhe skajeve.

Në botën moderne, modelimi i marrëdhënieve kërkon teknika gjithnjë e më komplekse. Për të modeluar marrëdhëniet, SQL Server 2017 ofron aftësi të bazës së të dhënave grafike. Kulmet dhe skajet e grafikut paraqiten si lloje të reja tabelash: NODE dhe EDGE. Pyetjet e grafikut përdorin një funksion të ri T-SQL të quajtur MATCH(). Meqenëse ky funksionalitet është i integruar në SQL Server 2017, ai mund të përdoret në bazat e të dhënave tuaja ekzistuese pa pasur nevojë për ndonjë konvertim.

Përfitimet e modelit grafik

Në ditët e sotme, bizneset dhe përdoruesit kërkojnë aplikacione që punojnë me gjithnjë e më shumë të dhëna, ndërsa presin performancë dhe besueshmëri të lartë. Paraqitja grafike e të dhënave ofron një mjet të përshtatshëm për trajtimin e marrëdhënieve komplekse. Kjo qasje zgjidh shumë probleme dhe ndihmon për të marrë rezultate brenda një konteksti të caktuar.

Duket se shumë aplikacione do të përfitojnë nga bazat e të dhënave grafike në të ardhmen.

Modelimi i të dhënave: Nga modelimi relacional në grafik

Hyrje në bazat e të dhënave të grafikut SQL Server 2017
Shembull

Le të shohim një shembull të një strukture organizative me një hierarki punonjësish: një punonjës raporton te një menaxher, një menaxher raporton tek një menaxher i lartë, e kështu me radhë. Në varësi të kompanisë specifike, mund të ketë çdo numër nivelesh në këtë hierarki. Por ndërsa numri i niveleve rritet, llogaritja e marrëdhënieve në një bazë të dhënash relacionale bëhet gjithnjë e më e vështirë. Është mjaft e vështirë të imagjinohet hierarkia e punonjësve, hierarkia në marketing apo lidhjet me mediat sociale. Le të shohim se si SQL Graph mund të zgjidhë problemin e trajtimit të niveleve të ndryshme të hierarkisë.

Për këtë shembull, le të bëjmë një model të thjeshtë të dhënash. Krijoni një tabelë të punonjësve PMM me id EMPNO dhe kolona M.G.R.A që tregon ID-në e drejtuesit (menaxherit) të punonjësit. I gjithë informacioni rreth hierarkisë ruhet në këtë tabelë dhe mund të kërkohet duke përdorur kolona EMPNO и M.G.R..

Hyrje në bazat e të dhënave të grafikut SQL Server 2017
Diagrami i mëposhtëm tregon gjithashtu të njëjtin model të grafikut organik me katër nivele foleje në një formë më të njohur. Punonjësit janë kulmet e grafikut nga tabela PMM. Njësia ekonomike "punonjës" është e lidhur me vetveten nga marrëdhënia "paraqitet" (ReportsTo). Në termat e grafikut, një lidhje është një skaj (EDGE) që lidh nyjet (NODE) ​​të punonjësve.

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

Le të krijojmë një tabelë të rregullt PMM dhe shtoni vlera atje sipas diagramit të mësipërm.

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)

Figura më poshtë tregon punonjësit:

  • punonjës me EMPNO 7369 është në varësi të 7902;
  • punonjës me EMPNO 7902 në varësi të 7566
  • punonjës me EMPNO 7566 në varësi të 7839

Hyrje në bazat e të dhënave të grafikut SQL Server 2017
Tani le të shohim paraqitjen e të njëjtave të dhëna në formën e një grafiku. Nyja EMPLOYEE ka disa atribute dhe është e lidhur me vetveten nga një marrëdhënie "submits" (EmplReportsTo). EmplReportsTo është emri i marrëdhënies.

Tabela e skajeve (EDGE) mund të ketë gjithashtu atribute.

Hyrje në bazat e të dhënave të grafikut SQL Server 2017
Krijoni një tabelë nyje EmpNode

Sintaksa për krijimin e një nyje është mjaft e thjeshtë: tek shprehja KRIJONI TABELN shtuar në fund SI NYJË.

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 le t'i konvertojmë të dhënat nga një tabelë e rregullt në një grafik. Tjetra INSERT fut të dhëna nga një tabelë relacionale PMM.

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

Hyrje në bazat e të dhënave të grafikut SQL Server 2017
Në tabelën e nyjeve në një kolonë të veçantë $node_id_* ID-ja e hostit ruhet si JSON. Kolonat e mbetura të kësaj tabele përmbajnë atributet e nyjës.

Krijo skajet (EDGE)

Krijimi i një tabele të skajeve është shumë i ngjashëm me krijimin e një tabele nyje, përveç fjalës kyçe SI EDGE.

CREATE TABLE empReportsTo(Deptno int) AS EDGE

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

Tani le të përcaktojmë marrëdhëniet midis punonjësve duke përdorur kolonat EMPNO и M.G.R.. Grafiku organizativ tregon 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 skajeve ka tre kolona si parazgjedhje. Së pari, $edge_id — identifikuesi i skajit në formën e JSON. dy te tjerat ($from_id и $to_id) përfaqësojnë marrëdhëniet ndërmjet nyjeve. Përveç kësaj, skajet mund të kenë veti shtesë. Në rastin tonë, kjo Deptno.

Pamjet e sistemit

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

  1. është_buzë
  2. është_nyja

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

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

ssms

Objektet që lidhen me grafikët ndodhen në dosjen Graph Tables. Ikona e tabelës së nyjeve shënohet me një pikë dhe ikona e tabelës së skajeve shënohet me dy rrathë të lidhur (që duket pak si syze).

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

Shprehje NDESHJE

shprehje NDESHJE marrë nga CQL (Cypher Query Language). Kjo është një mënyrë efikase për të kërkuar vetitë e një grafiku. CQL fillon me një shprehje NDESHJE.

sintaksë

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

shembuj

Le të shohim disa shembuj.

Pyetja më poshtë tregon punonjësit të cilëve Smith dhe menaxheri i tij raportojnë.

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 të grafikut SQL Server 2017
Pyetja e mëposhtme është për gjetjen e punonjësve dhe menaxherëve të nivelit të dytë për Smith. Nëse e hiqni ofertën KU, atëherë të gjithë punonjësit do të shfaqen si rezultat.

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 të grafikut SQL Server 2017
Dhe së fundi, një kërkesë 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 të grafikut SQL Server 2017
Tani le të ndryshojmë drejtimin për të marrë shefat e Smith.

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 të grafikut SQL Server 2017

Përfundim

SQL Server 2017 është vendosur si një zgjidhje e plotë e ndërmarrjes për një sërë nevojash biznesi për IT. Versioni i parë i SQL Graph është shumë premtues. Edhe përkundër disa kufizimeve, tashmë ka mjaft funksionalitet për të eksploruar mundësitë e grafikëve.

Funksionaliteti SQL Graph është plotësisht i integruar në SQL Engine. Sidoqoftë, siç është përmendur tashmë, SQL Server 2017 ka kufizimet e mëposhtme:

Nuk ka mbështetje për polimorfizmin.

  • Mbështeten vetëm lidhjet me një drejtim.
  • Edges nuk mund të përditësojnë kolonat e tyre $from_id dhe $to_id përmes UPDATE.
  • Mbylljet kalimtare nuk mbështeten, por ato mund të merren duke përdorur CTE.
  • Mbështetje e kufizuar për objektet OLTP në memorie.
  • Tabelat e përkohshme (Tabela e përkohshme e versionit të sistemit), tabelat e përkohshme lokale dhe globale nuk mbështeten.
  • Llojet e tabelave dhe variablat e tabelave nuk mund të deklarohen si NODE ose EDGE.
  • Kërkesat ndërmjet bazave të të dhënave nuk mbështeten.
  • Nuk ka asnjë mënyrë të drejtpërdrejtë ose ndonjë lloj magjistari (magjistari) për të kthyer tabelat e rregullta në tabela grafike.
  • Nuk ka GUI për të shfaqur grafikët, por Power BI mund të përdoret.

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

Lexo më shumë:

Burimi: www.habr.com

Shto një koment