Ikastaroa hasi baino lehen
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
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..
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.
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
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.
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
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
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:
- da_ertza
- da_nodoa
SELECT t.is_edge,t.is_node,*
FROM sys.tables t
WHERE name like 'emp%'
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).
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'
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'
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'
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)
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.
Irakurri gehiago:
Iturria: www.habr.com