Qabel il-bidu tal-kors
Id-databases tal-grafiċi huma teknoloġija importanti għall-professjonisti tad-databases. Nipprova nlaħħaq ma' innovazzjonijiet u teknoloġiji ġodda f'dan il-qasam u, wara li naħdem ma' databases relazzjonali u NoSQL, nara r-rwol tad-databases tal-grafiċi qed isir dejjem aktar importanti. Meta taħdem ma 'dejta ġerarkika kumplessa, mhux biss databases tradizzjonali huma ineffettivi, iżda wkoll NoSQL. Ħafna drabi, hekk kif in-numru ta 'livelli ta' konnessjoni u d-daqs tad-database jiżdiedu, il-prestazzjoni tonqos. U hekk kif ir-relazzjonijiet isiru aktar kumplessi, in-numru ta 'JOINs jiżdied ukoll.
Naturalment, il-mudell relazzjonali għandu soluzzjonijiet biex taħdem ma 'ġerarkiji (per eżempju, bl-użu ta' CTEs rikorsivi), iżda dawn għadhom soluzzjonijiet. Fl-istess ħin, il-funzjonalità tad-databases tal-grafiċi SQL Server tippermettilek li timmaniġġja faċilment livelli multipli ta 'ġerarkija. Kemm il-mudell tad-dejta kif ukoll il-mistoqsijiet huma ssimplifikati, u għalhekk l-effiċjenza tagħhom tiżdied. L-ammont ta 'kodiċi huwa mnaqqas b'mod sinifikanti.
Id-databases tal-grafiċi huma lingwaġġ espressiv biex jirrapreżentaw sistemi kumplessi. Din it-teknoloġija diġà tintuża ħafna fl-industrija tal-IT f'oqsma bħal netwerks soċjali, sistemi kontra l-frodi, analiżi tan-netwerk tal-IT, rakkomandazzjonijiet soċjali, rakkomandazzjonijiet tal-prodotti u tal-kontenut.
Il-funzjonalità tad-database tal-graff f'SQL Server hija adattata għal xenarji fejn id-dejta hija interkonnessa ħafna u għandha relazzjonijiet definiti sew.
Mudell tad-Dejta tal-Graff
Graff huwa sett ta' vertiċi (nodi) u truf (relazzjonijiet, tarf). Il-vertiċi jirrappreżentaw entitajiet, u t-truf jirrappreżentaw relazzjonijiet li l-attributi tagħhom jista 'jkun fihom informazzjoni.
Database tal-graff timmudella entitajiet bħala graff kif definit fit-teorija tal-graff. L-istrutturi tad-dejta huma vertiċi u truf. L-attributi huma proprjetajiet ta' vertiċi u truf. Konnessjoni hija konnessjoni ta 'vertiċi.
B'differenza mill-mudelli tad-dejta l-oħra, id-databases tal-grafiċi jipprijoritizzaw ir-relazzjonijiet bejn l-entitajiet. Għalhekk, m'hemmx bżonn li jiġu kkalkulati relazzjonijiet bl-użu ta 'ċwievet barranin jew kwalunkwe mezz ieħor. Huwa possibbli li jinħolqu mudelli ta 'dejta kumplessi bl-użu biss ta' astrazzjonijiet tal-vertiċi u tat-tarf.
Fid-dinja moderna, l-immudellar tar-relazzjonijiet jeħtieġ tekniki dejjem aktar kumplessi. Biex timmudella r-relazzjonijiet, SQL Server 2017 joffri kapaċitajiet ta' database tal-graff. Il-vertiċi u t-truf tal-graff huma rappreżentati bħala tipi ġodda ta' tabelli: NODE u EDGE. Mistoqsijiet graff jużaw funzjoni T-SQL ġdida msejħa MATCH(). Peress li din il-funzjonalità hija mibnija fis-SQL Server 2017, tista 'tintuża fid-databases eżistenti tiegħek mingħajr il-ħtieġa ta' xi konverżjoni.
Benefiċċji tal-mudell tal-graff
Illum, in-negozji u l-utenti jitolbu applikazzjonijiet li jimmaniġġjaw aktar u aktar data, filwaqt li jistennew prestazzjoni u affidabilità għolja. Ir-rappreżentazzjoni tad-dejta bħala graff toffri mezz konvenjenti biex jiġu mmaniġġjati relazzjonijiet kumplessi. Dan l-approċċ isolvi ħafna problemi u jgħin biex jinkisbu riżultati f'kuntest partikolari.
Jidher li ħafna applikazzjonijiet se jibbenefikaw mill-użu tad-databases tal-grafiċi fil-futur.
Immudellar tad-dejta: minn mudell relazzjonali għal graff
Eżempju
Ejja nħarsu lejn eżempju ta 'struttura organizzattiva b'ġerarkija ta' impjegati: impjegat jirrapporta lil maniġer, maniġer jirrapporta lil maniġer anzjan, eċċ. Skont il-kumpanija speċifika, jista 'jkun hemm kwalunkwe numru ta' livelli f'din il-ġerarkija. Iżda hekk kif in-numru ta 'livelli jiżdied, il-kalkolu tar-relazzjonijiet f'database relazzjonali jsir aktar u aktar diffiċli. Huwa pjuttost diffiċli li wieħed jimmaġina l-ġerarkija tal-impjegati, il-ġerarkija fil-marketing jew il-konnessjonijiet fin-netwerks soċjali. Ejja naraw kif SQL Graph jista 'jsolvi l-problema tal-immaniġġjar ta' livelli differenti ta 'ġerarkija.
Għal dan l-eżempju se nagħmlu mudell tad-dejta sempliċi. Ejja noħolqu tabella ta 'impjegati EMP bl-ID EMPNO u kolonna M.G.R., li jindika l-identifikatur tas-superviżur (maniġer) tal-impjegat. L-informazzjoni kollha dwar il-ġerarkija hija maħżuna f'din it-tabella u tista' tiġi mistoqsija bl-użu ta' kolonni EMPNO и M.G.R..
Id-dijagramma li ġejja turi l-istess mudell ta 'struttura organizzattiva b'erba' livelli ta 'bejta f'forma aktar familjari. L-impjegati huma l-punti ta' graff minn tabella EMP. L-entità “impjegat” hija konnessa magħha nnifisha mill-konnessjoni “jissottometti” (ReportsTo). F'termini ta 'graff, rabta hija tarf (EDGE) li jgħaqqad nodi (NODE) ta' impjegati.
Ejja noħolqu tabella regolari EMP u żid il-valuri hemmhekk skont id-dijagramma ta 'hawn fuq.
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)
L-istampa hawn taħt turi l-impjegati:
- impjegat ma EMPNO 7369 jobdi 7902;
- impjegat ma EMPNO 7902 jobdi 7566
- impjegat ma EMPNO 7566 jobdi 7839
Issa ejja nħarsu lejn rappreżentazzjoni graff tal-istess data. Il-vertiċi IMPJEGAT għandu diversi attributi u huwa konness miegħu nnifsu bir-relazzjoni "subordinati" (EmplReportsTo). EmplReportsTo huwa l-isem tar-relazzjoni.
It-tabella tat-tarf (EDGE) jista' jkun fiha wkoll attributi.
Ejja noħolqu tabella node EmpNode
Is-sintassi għall-ħolqien ta 'node hija pjuttost sempliċi: għall-espressjoni ĦOLQI TABELLA huwa miżjud fl-aħħar "KIF NODU".
CREATE TABLE dbo.EmpNode(
ID Int Identity(1,1),
EMPNO NUMERIC(4) NOT NULL,
ENAME VARCHAR(10),
MGR NUMERIC(4),
DNO INT
) AS NODE;
Issa ejja nikkonverti d-dejta minn tabella regolari għal tabella graff. Li jmiss DAĦĦAL idaħħal data minn tabella relazzjonali EMP.
INSERT INTO EmpNode(EMPNO,ENAME,MGR,DNO) select empno,ename,MGR,dno from emp
Fit-tabella tan-nodi f'kolonna speċjali $node_id_*
l-identifikatur tan-node huwa maħżun bħala JSON. Il-kolonni li jifdal ta' din it-tabella fihom l-attributi tan-node.
Il-ħolqien tat-truf (EDGE)
Il-ħolqien ta 'tabella tat-tarf huwa simili ħafna għall-ħolqien ta' tabella ta 'nodi, ħlief li tintuża l-kelma prinċipali "KIF XIFER".
CREATE TABLE empReportsTo(Deptno int) AS EDGE
Issa ejja niddefinixxu konnessjonijiet bejn l-impjegati li jużaw kolonni EMPNO и M.G.R.. Id-dijagramma tal-istruttura organizzattiva turi b'mod ċar kif tikteb DAĦĦAL.
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);
It-tabella tat-tarf default tikkonsisti fi tliet kolonni. L-ewwel, $edge_id
— identifikatur tat-tarf fil-forma JSON. It-tnejn l-oħra ($from_id
и $to_id
) jirrappreżentaw il-konnessjoni bejn in-nodi. Barra minn hekk, it-truf jista 'jkollhom proprjetajiet addizzjonali. Fil-każ tagħna huwa Deptno.
Veduti tas-Sistema
Fil-fehma tas-sistema sys.tables
dehru żewġ kolonni ġodda:
- is_edge
- is_node
SELECT t.is_edge,t.is_node,*
FROM sys.tables t
WHERE name like 'emp%'
ssms
Oġġetti relatati mal-grafiċi jinsabu fil-folder tat-Tabelli tal-Graffi. L-ikona tal-mejda tan-nodi hija mmarkata b'tikka, u l-ikona tat-tabella tat-tarf hija mmarkata b'żewġ ċrieki konnessi (daqsxejn bħal nuċċalijiet).
MATCH espressjoni
Espressjoni MATCH meħuda minn CQL (Cypher Query Language). Dan huwa mod effiċjenti biex issir mistoqsija dwar il-proprjetajiet ta' graff. CQL jibda b'espressjoni MATCH.
sintassi
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
eżempji
Ejja nħarsu lejn ftit eżempji.
Il-mistoqsija hawn taħt turi l-impjegati li Smith u l-maniġer tiegħu jirrapportaw lilhom.
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'
Il-mistoqsija li ġejja hija biex jinstabu impjegati u maniġers tat-tieni livell għal Smith. Jekk tneħħi s-sentenza FEJN, allura r-riżultat se juri l-impjegati kollha.
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'
U fl-aħħarnett, talba għal impjegati u maniġers tat-tielet livell.
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'
Issa ejja nbiddlu d-direzzjoni biex niksbu l-kapijiet ta’ 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)
Konklużjoni
SQL Server 2017 stabbilixxa ruħu bħala soluzzjoni intrapriża kompluta għal diversi kompiti kummerċjali tal-IT. L-ewwel verżjoni ta 'SQL Graph hija promettenti ħafna. Anke minkejja xi limitazzjonijiet, diġà hemm biżżejjed funzjonalità biex tesplora l-kapaċitajiet tal-graffs.
Il-funzjonalità tal-Graff SQL hija integrata bis-sħiħ fl-SQL Engine. Madankollu, kif diġà ntqal, SQL Server 2017 għandu l-limitazzjonijiet li ġejjin:
L-ebda appoġġ ta 'polimorfiżmu.
- Konnessjonijiet unidirezzjonali biss huma appoġġjati.
- It-truf ma jistgħux jaġġornaw il-kolonni $from_id u $to_id permezz ta' UPDATE.
- L-għeluq transittiv mhumiex appoġġjati, iżda jistgħu jinkisbu bl-użu ta 'CTE.
- L-appoġġ għall-oġġetti OLTP In-Memory huwa limitat.
- Tabelli temporali (Tabella Temporali Verżjoni tas-Sistema), tabelli temporanji lokali u globali mhumiex appoġġjati.
- Tipi ta' tabella u varjabbli ta' tabella ma jistgħux jiġu ddikjarati bħala NODE jew EDGE.
- Mistoqsijiet bejn databases mhumiex appoġġjati.
- M'hemm l-ebda mod dirett jew wizard biex tikkonverti tabelli regolari għal tabelli graffs.
- M'hemm l-ebda GUI biex turi graffs, iżda tista 'tuża Power BI.
Aqra iktar:
Sors: www.habr.com