SQL Server 2017 grafikoen datu-baseen sarrera

Ikastaroa hasi baino lehen "MS SQL Server garatzailea" Beste itzulpen erabilgarria prestatu dugu zuretzat.

Datu-base grafikoak teknologia garrantzitsua dira datu-baseen profesionalentzat. Arlo honetako berrikuntzak eta teknologia berriak jarraitzen saiatzen naiz eta datu-base erlazionalekin eta NoSQLekin lan egin ondoren, datu base grafikoen papera gero eta handiagoa dela ikusten dut. Datu hierarkiko konplexuekin lan egiten denean, datu-base tradizionalak ez ezik, NoSQL ere ez dira eraginkorrak. Askotan, esteka-mailen kopurua eta datu-basearen tamaina handitzearekin batera, errendimendua gutxitzen da. Eta harremanak konplexuagoak diren heinean, JOIN kopurua ere handitzen da.

Jakina, eredu erlazionalean hierarkiekin lan egiteko irtenbideak daude (adibidez, CTE errekurtsiboak erabiliz), baina hauek konponbideak dira oraindik. Aldi berean, SQL Server datu-base grafikoen funtzionaltasunak hierarkia-maila anitzak kudeatzea errazten du. Datu-eredua zein kontsultak sinplifikatu egiten dira, eta, beraz, haien eraginkortasuna areagotzen da. Kode kopurua nabarmen murrizten du.

Datu-base grafikoak sistema konplexuak irudikatzeko hizkuntza adierazgarria dira. Teknologia hau dagoeneko oso zabalduta dago IT industrian sare sozialetan, iruzurraren aurkako sistemetan, sare informatikoen analisian, gomendio sozialetan, produktuen eta edukien gomendioetan.

Datu-base grafikoen funtzionaltasuna SQL Server-en egokia da datuak elkarri lotuta dauden eta ondo definitutako erlazioak dituzten eszenatokietarako.

Datu grafikoen eredua

Grafikoa erpin (nodoak, nodoak) eta ertzak (erlazioak, ertza) multzo bat da. Erpinek entitateak adierazten dituzte, eta ertzek, zeinen atributuek informazioa eduki dezaketen estekak.

Grafikoen datu-base batek entitateak grafiko gisa modelatzen ditu, grafoen teorian definitutako moduan. Datu-egiturak erpinak eta ertzak dira. Atributuak erpinen eta ertzen propietateak dira. Konexio bat erpinen konexioa da.

Beste datu-eredu batzuek ez bezala, datu-base grafikoek entitateen arteko harremanak lehenesten dituzte. Hori dela eta, ez dago erlazioak atzerriko gakoak erabiliz edo beste modu batera kalkulatu beharrik. Datu-eredu konplexuak sortzea posible da erpin eta ertz abstrakzioak soilik erabiliz.

Gaur egungo munduan, harremanak modelatzeko gero eta teknika sofistikatuagoak behar dira. Erlazioak modelatzeko, SQL Server 2017 grafikoen datu-basearen gaitasunak eskaintzen ditu. Grafikoaren erpinak eta ertzak taula mota berri gisa irudikatzen dira: NODO eta ERTZA. Grafikoen kontsultak MATCH() izeneko T-SQL funtzio berri bat erabiltzen dute. Funtzionalitate hau SQL Server 2017-n integratuta dagoenez, lehendik dituzun datu-baseetan erabil daiteke datu-base bihurketarik egin beharrik gabe.

Grafiko ereduaren onurak

Gaur egun, enpresek eta erabiltzaileek gero eta datu gehiagorekin lan egiten duten aplikazioak eskatzen dituzte, errendimendu eta fidagarritasun handia espero duten bitartean. Datuen grafikoaren irudikapenak harreman konplexuak kudeatzeko bitarteko egokia eskaintzen du. Ikuspegi honek arazo asko konpontzen ditu eta testuinguru jakin batean emaitzak lortzen laguntzen du.

Badirudi aplikazio askok etorkizunean grafikoen datu-baseetatik etekina aterako dutela.

Datuen modelizazioa: Erlaziozko eredutik grafikoetara

SQL Server 2017 grafikoen datu-baseen sarrera
Adibidea

Ikus dezagun langileen hierarkia duen antolakuntza-egituraren adibide bat: langile bat zuzendari baten menpe dago, zuzendari batek goi-zuzendari baten menpe, eta abar. Enpresa zehatzaren arabera, hierarkia honetan edozein maila egon daitezke. Baina maila kopurua handitzen den heinean, datu-base erlazional batean erlazioak kalkulatzea gero eta zailagoa da. Nahiko zaila da langileen hierarkia, marketin edo sare sozialetako konexioen hierarkia imajinatzea. Ikus dezagun SQL Graph-ek hierarkia-maila desberdinak maneiatzeko arazoa nola ebatzi dezakeen.

Adibide honetarako, egin dezagun datu-eredu sinple bat. Sortu langileen taula EMP idarekin EMPNO eta zutabea M.G.R.Langilearen buruaren (kudeatzailea) NANa adierazten duena. Hierarkiari buruzko informazio guztia taula honetan gordetzen da eta zutabeen bidez kontsulta daiteke EMPNO ΠΈ M.G.R..

SQL Server 2017 grafikoen datu-baseen sarrera
Ondorengo diagramak ere organigrama-eredu bera erakusten du lau habia-maila dituen forma ezagunago batean. Langileak taulako grafikoaren erpinak dira EMP. "Langilea" entitatea bere buruari lotuta dago "aurkezten" (ReportsTo) erlazioaren bidez. Grafiko terminoetan, esteka bat langileen nodoak (NODEak) lotzen dituen ertza (EDGE) da.

SQL Server 2017 grafikoen datu-baseen sarrera

Sortu dezagun mahai arrunt bat EMP eta gehitu balioak hor goiko diagramaren arabera.

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)

Beheko irudian langileak erakusten dira:

  • langilearekin EMPNO 7369 7902ren menpe dago;
  • langilearekin EMPNO 7902 7566ren menpekoa
  • langilearekin EMPNO 7566 7839ren menpekoa

SQL Server 2017 grafikoen datu-baseen sarrera
Ikus dezagun orain datu berdinen irudikapena grafiko moduan. LANGILE nodoak hainbat atributu ditu eta bere buruarekin lotuta dago "bidaltzen" erlazio baten bidez (EmplReportsTo). EmplReportsTo harremanaren izena da.

Ertz-taulak (EDGE) ere atributuak izan ditzake.

SQL Server 2017 grafikoen datu-baseen sarrera
Sortu nodoen taula EmpNode

Nodo bat sortzeko sintaxia nahiko erraza da: esapidera TAULA SORTU amaierara gehituta NODO GISA.

CREATE TABLE dbo.EmpNode(
ID Int Identity(1,1),
EMPNO NUMERIC(4) NOT NULL,
ENAME VARCHAR(10),
MGR NUMERIC(4),
DNO INT
) AS NODE;

Orain, bihur ditzagun datuak taula arrunt batetik grafiko batera. Hurrengoa INSERT erlazio-taula bateko datuak txertatzen ditu EMP.

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

SQL Server 2017 grafikoen datu-baseen sarrera
Nodoen taulan zutabe berezi batean $node_id_* ostalariaren IDa JSON gisa gordetzen da. Taula honetako gainerako zutabeek nodoaren atributuak dituzte.

Sortu ertzak (EDGE)

Ertz-taula sortzea nodo-taula bat sortzearen oso antzekoa da, gako-hitza izan ezik ERTZA GISA.

CREATE TABLE empReportsTo(Deptno int) AS EDGE

SQL Server 2017 grafikoen datu-baseen sarrera

Orain defini ditzagun langileen arteko harremanak zutabeak erabiliz EMPNO ΠΈ M.G.R.. Organigramak argi erakusten du nola idatzi 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);

Ertz-taulak hiru zutabe ditu lehenespenez. Lehenik eta behin, $edge_id β€” ertz-identifikatzailea JSON moduan. Beste biak ($from_id ΠΈ $to_id) nodoen arteko erlazioa adierazten du. Horrez gain, ertzek propietate gehigarriak izan ditzakete. Gure kasuan, hau Deptno.

Sistemaren ikuspegiak

Sistemaren ikuspegian sys.tables Bi zutabe berri daude:

  1. da_ertza
  2. da_nodoa

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

SQL Server 2017 grafikoen datu-baseen sarrera

ssms

Grafikoekin erlazionatutako objektuak Grafiko Taulen karpetan daude. Nodo-taularen ikonoa puntu batez markatuta dago, eta ertz-taularen ikonoa konektatutako bi zirkulurekin (betaurrekoen antza dauka).

SQL Server 2017 grafikoen datu-baseen sarrera

MATCH adierazpena

adierazpen MATCH CQL (Cypher Query Language)-tik hartua. Hau grafiko baten propietateak kontsultatzeko modu eraginkorra da. CQL adierazpen batekin hasten da MATCH.

sintaxia

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

Ikus ditzagun adibide batzuk.

Beheko kontsultak Smithek eta bere zuzendariak jakinarazitako langileak erakusten ditu.

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'

SQL Server 2017 grafikoen datu-baseen sarrera
Ondorengo kontsulta Smith-en langileak eta bigarren mailako kudeatzaileak aurkitzeko da. Eskaintza kentzen baduzu NON, orduan langile guztiak agertuko dira ondorioz.

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'

SQL Server 2017 grafikoen datu-baseen sarrera
Eta azkenik, hirugarren mailako langile eta zuzendarientzako eskaera.

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'

SQL Server 2017 grafikoen datu-baseen sarrera
Orain alda dezagun norabidea Smith-en nagusiak lortzeko.

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)

SQL Server 2017 grafikoen datu-baseen sarrera

Ondorioa

SQL Server 2017 enpresa-irtenbide oso gisa ezarri da negozioen informatika-beharretarako. SQL Graph-en lehen bertsioa oso itxaropentsua da. Nahiz eta muga batzuk izan, dagoeneko badago nahikoa funtzionaltasun grafikoen aukerak aztertzeko.

SQL Graph funtzionaltasuna guztiz integratuta dago SQL Engine-n. Hala ere, esan bezala, SQL Server 2017-k muga hauek ditu:

Polimorfismoaren euskarririk ez.

  • Norabide bakarreko estekak bakarrik onartzen dira.
  • Edgesek ezin ditu $from_id eta $to_id zutabeak eguneratu UPDATE bidez.
  • Itxiera iragankorrak ez dira onartzen, baina CTEak erabiliz lor daitezke.
  • Memoria barneko OLTP objektuentzako laguntza mugatua.
  • Denbora-taulak (System-Versioned Temporal Table), aldi baterako taula lokalak eta globalak ez dira onartzen.
  • Taula motak eta taula aldagaiak ezin dira NODE edo EDGE gisa deklaratu.
  • Datu-baseen arteko kontsultak ez dira onartzen.
  • Ez dago modu zuzenik edo nolabaiteko morroirik (morroi) taula arruntak grafiko taula bihurtzeko.
  • Ez dago grafikoak bistaratzeko GUIrik, baina Power BI erabil daiteke.

SQL Server 2017 grafikoen datu-baseen sarrera

Irakurri gehiago:

Iturria: www.habr.com

Gehitu iruzkin berria