Kabla ya kuanza kwa kozi Tumekuandalia tafsiri nyingine muhimu.
Hifadhidata za grafu ni teknolojia muhimu kwa wataalamu wa hifadhidata. Ninajaribu kuendelea na uvumbuzi na teknolojia mpya katika uwanja huu, na baada ya kufanya kazi na hifadhidata za uhusiano na NoSQL, naona kuwa jukumu la hifadhidata za grafu linazidi kuwa muhimu. Wakati wa kufanya kazi na data tata ya uongozi, sio tu hifadhidata za jadi lakini pia za NoSQL hazifanyi kazi. Utendaji mara nyingi hupungua kadri idadi ya viwango vya uhusiano na saizi ya hifadhidata inavyoongezeka. Na kadiri mahusiano yanavyozidi kuwa magumu, ndivyo idadi ya wanaojiunga inavyoongezeka.
Kwa kweli, mfano wa uhusiano hutoa suluhisho za kufanya kazi na madaraja (kwa mfano, kutumia CTE za kujirudia), lakini hizi zinabaki kuwa suluhisho. Wakati huo huo, utendakazi wa hifadhidata za grafu za Seva ya SQL hurahisisha kushughulikia viwango vingi vya uongozi. Muundo wa data na maswali hurahisishwa, na hivyo kuongeza ufanisi wao. Kiasi cha msimbo kimepunguzwa sana.
Hifadhidata za grafu ni lugha ya kujieleza kwa kuwakilisha mifumo changamano. Teknolojia hii tayari inatumika sana katika tasnia ya TEHAMA katika maeneo kama vile mitandao ya kijamii, mifumo ya kupambana na ulaghai, uchambuzi wa mtandao wa TEHAMA, mapendekezo ya kijamii, na mapendekezo ya bidhaa na maudhui.
Utendaji wa hifadhidata ya grafu katika Seva ya SQL inafaa kwa hali ambapo data imeunganishwa sana na ina uhusiano uliobainishwa vyema.
Mfano wa data ya grafu
Grafu ni seti ya vipeo (nodi) na kingo (mahusiano). Wima huwakilisha huluki, na kingo zinawakilisha uhusiano ambao sifa zake zinaweza kuwa na taarifa.
Huluki za hifadhidata ya grafu kama grafu, kama inavyofafanuliwa na nadharia ya grafu. Miundo ya data ni nodi na kingo. Sifa ni mali ya nodi na kingo. Mahusiano ni uhusiano kati ya nodi.
Tofauti na miundo mingine ya data, hifadhidata za grafu hutanguliza uhusiano kati ya huluki. Kwa hivyo, hakuna haja ya kuhesabu uhusiano kwa kutumia funguo za kigeni au njia zingine. Miundo changamano ya data inaweza kujengwa kwa kutumia kipeo pekee na vifupisho vya makali.
Katika ulimwengu wa kisasa, uhusiano wa kielelezo unahitaji mbinu za kisasa zaidi. SQL Server 2017 inatoa uwezo wa hifadhidata ya grafu kwa uhusiano wa kielelezo. Nodi za grafu na kingo zinawakilishwa kama aina mpya za jedwali: NODE na EDGE. Kitendakazi kipya cha T-SQL kiitwacho MATCH() kinatumika kwa hoja za grafu. Kwa kuwa utendakazi huu umejengwa katika SQL Server 2017, inaweza kutumika katika hifadhidata zako zilizopo bila hitaji la ubadilishaji wowote.
Faida za mfano wa grafu
Leo, biashara na watumiaji hudai programu zinazoshughulikia idadi inayoongezeka ya data, huku ikitarajia utendakazi wa juu na kutegemewa. Kuwakilisha data kama grafu hutoa zana rahisi za kuchakata uhusiano changamano. Mbinu hii hutatua matatizo mengi na husaidia kupata matokeo ndani ya muktadha fulani.
Inaonekana kwamba programu nyingi zitafaidika kwa kutumia hifadhidata za grafu katika siku zijazo.
Uundaji wa Data: Kutoka Mahusiano hadi Mfano wa Grafu

Mfano
Hebu tuangalie mfano wa muundo wa shirika na uongozi wa mfanyakazi: mfanyakazi anaripoti kwa meneja, meneja anaripoti kwa meneja mkuu, na kadhalika. Kulingana na kampuni maalum, uongozi huu unaweza kuwa na idadi yoyote ya viwango. Lakini kadri idadi ya viwango inavyoongezeka, kuhesabu uhusiano katika hifadhidata ya uhusiano kunazidi kuwa ngumu. Ni vigumu sana kuwakilisha uongozi wa wafanyakazi, uongozi wa masoko, au mahusiano ya mitandao ya kijamii katika hifadhidata ya uhusiano. Wacha tuangalie jinsi Grafu ya SQL inaweza kutatua shida ya usindikaji wa viwango tofauti vya uongozi.
Kwa mfano huu, tutaunda muundo rahisi wa data. Tutaunda meza ya wafanyikazi. EMP na kitambulisho EMPNO na safu MGR, ikionyesha kitambulisho cha meneja wa mfanyakazi. Taarifa zote za uongozi zimehifadhiwa katika jedwali hili na zinaweza kuulizwa kwa kutumia safuwima. EMPNO и MGR.

Mchoro ufuatao pia unaonyesha modeli sawa ya muundo wa shirika na viwango vinne vya kutagia katika umbo linalofahamika zaidi. Wafanyakazi ni nodi za grafu kwenye jedwali. EMPChombo cha "mfanyakazi" kimeunganishwa nacho chenyewe na uhusiano wa "reportsto". Kwa maneno ya grafu, uhusiano ni makali (makali) ambayo huunganisha nodes za wafanyakazi (nodes).

Wacha tuunda meza ya kawaida EMP na ongeza maadili hapo kulingana na mchoro hapo juu.
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)Picha hapa chini inaonyesha wafanyikazi:
- mfanyakazi na EMPNO 7369 iko chini ya 7902;
- mfanyakazi na EMPNO 7902 inatii 7566
- mfanyakazi na EMPNO 7566 inatii 7839

Sasa hebu tuangalie uwakilishi wa grafu wa data sawa. Nodi ya MWAJIRI ina sifa kadhaa na imeunganishwa yenyewe na uhusiano wa "wasaidizi wa" (EmplReportsTo). EmplReportsTo ni jina la uhusiano.
Jedwali la EDGE pia linaweza kuwa na sifa.

Wacha tuunde jedwali la nodi za EmpNode
Syntax ya kuunda nodi ni rahisi sana: kwa usemi Unda Jedwali imeongezwa hadi mwisho "AS NODE".
CREATE TABLE dbo.EmpNode(
ID Int Identity(1,1),
EMPNO NUMERIC(4) NOT NULL,
ENAME VARCHAR(10),
MGR NUMERIC(4),
DNO INT
) AS NODE;Sasa tutabadilisha data kutoka kwa jedwali la kawaida hadi grafu. Inayofuata Insert huingiza data kutoka kwa jedwali la uhusiano EMP.
INSERT INTO EmpNode(EMPNO,ENAME,MGR,DNO) select empno,ename,MGR,dno from emp 
Katika meza ya node katika safu maalum $node_id_* Kitambulisho cha nodi kimehifadhiwa kama JSON. Safu zilizobaki za jedwali hili zina sifa za nodi.
Kuunda kingo (EDGE)
Kuunda meza ya makali ni sawa na kuunda meza ya nodi, isipokuwa kwamba neno kuu linatumiwa AS EDGE.
CREATE TABLE empReportsTo(Deptno int) AS EDGE 
Sasa hebu tufafanue uhusiano kati ya wafanyikazi kwa kutumia safu EMPNO и MGRChati ya shirika inaonyesha wazi jinsi ya kuandika 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); Jedwali la ukingo chaguo-msingi lina safu wima tatu. Ya kwanza, $edge_id - kitambulisho cha makali katika fomu ya JSON. Wengine wawili ($from_id и $to_id) kuwakilisha uhusiano kati ya nodi. Kwa kuongeza, kando inaweza kuwa na mali ya ziada. Kwa upande wetu, hizi ni Deptno.
Uwakilishi wa mfumo
Katika mtazamo wa mfumo sys.tables safu mbili mpya zilionekana:
- ni_makali
- ni_nodi
SELECT t.is_edge,t.is_node,*
FROM sys.tables t
WHERE name like 'emp%' 
SMS
Vitu vinavyohusiana na grafu viko kwenye folda ya Jedwali la Grafu. Aikoni ya jedwali la nodi imewekwa alama ya nukta, huku ikoni ya jedwali la ukingo ikiwa na miduara miwili iliyounganishwa (ambayo inafanana kidogo na miwani ya macho).

MATCH kujieleza
Kuonyesha mECHI imechukuliwa kutoka CQL (Lugha ya Maswali ya Cypher). Ni njia bora ya kuuliza mali ya grafu. CQL huanza na usemi mECHI.
syntax
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_aliasmifano
Hebu tuangalie mifano fulani.
Hoja iliyo hapa chini inaonyesha wafanyikazi ambao Smith anaripoti kwao na meneja wake.
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' 
Hoja ifuatayo ni kutafuta wafanyikazi na wasimamizi wa kiwango cha pili kwa Smith. Ukiondoa sentensi WAPI, basi wafanyakazi wote wataonyeshwa kama matokeo.
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' 
Na hatimaye, ombi kwa wafanyakazi wa ngazi ya tatu na mameneja.
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' 
Sasa tubadili uelekeo tupate mabosi wa 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) 
Hitimisho
SQL Server 2017 imejidhihirisha kama suluhisho kamili la biashara kwa anuwai ya mahitaji ya IT ya biashara. Toleo la kwanza la Grafu ya SQL ni ya kuahidi sana. Hata kukiwa na mapungufu, tayari kuna utendakazi wa kutosha kuchunguza uwezo wa grafu.
Utendaji wa Grafu ya SQL umeunganishwa kikamilifu kwenye Injini ya SQL. Walakini, kama ilivyotajwa hapo awali, SQL Server 2017 ina mapungufu yafuatayo:
Hakuna msaada kwa polymorphism.
- Miunganisho ya unidirectional pekee ndiyo inayotumika.
- Kingo haziwezi kusasisha safu wima zake za $from_id na $to_id kupitia UPDATE.
- Vifungo vya mpito havitumiki, lakini vinaweza kupatikana kwa kutumia CTE.
- Usaidizi mdogo wa vipengee vya OLTP vya Kumbukumbu.
- Majedwali ya muda (Jedwali la Muda Lililotolewa na Mfumo), majedwali ya muda ya ndani na ya kimataifa hayatumiki.
- Aina za jedwali na anuwai za jedwali haziwezi kutangazwa kama NODE au EDGE.
- Hoja za hifadhidata mbalimbali hazitumiki.
- Hakuna njia ya moja kwa moja au mchawi wa kubadilisha majedwali ya kawaida kuwa majedwali ya grafu.
- Hakuna GUI ya kuonyesha grafu, lakini Power BI inaweza kutumika.
Soma zaidi:
Chanzo: mapenzi.com
