He kupu whakataki ki te SQL Server 2017 Graph Databases

I mua i te tiimata o te akoranga "Te Kaiwhakawhanake MS SQL Server" Kua whakaritea e matou tetahi atu whakamaoritanga whai hua mo koe.

Ko nga papaa raraunga kauwhata he hangarau nui mo nga tohunga ngaio. Ka ngana ahau ki te whai i nga mahi hou me nga hangarau hou i roto i tenei waahanga, a, i muri i te mahi tahi me nga paaunga hononga me te NoSQL, ka kite ahau kei te piki haere te mahi o nga papaa raraunga kauwhata. I te wa e mahi ana me nga raraunga hierarchical matatini, ehara i te mea ko nga paataka tuku iho, engari ko te NoSQL hoki kaore e whai hua. I te nuinga o nga wa, me te piki ake o te maha o nga taumata hono me te rahi o te papaarangi, ka heke te mahi. A, i te mea ka uaua ake nga hononga, ka piki ake ano te maha o nga TANGATA.

Ko te tikanga, kei roto i te tauira whanaungatanga he otinga mo te mahi tahi me nga hierarchies (hei tauira, te whakamahi i nga CTE recursive), engari he mahi tonu enei. I te wa ano, na te mahinga o nga papaa raraunga kauwhata SQL Server ka ngawari ki te hapai i nga taumata maha o te hierarchy. Ko nga tauira raraunga me nga patai ka ngawari ake, na reira ka piki ake te kaha. Ka tino whakaitihia te nui o te waehere.

Ko nga papaunga raraunga kauwhata he reo whakaatu hei tohu i nga punaha uaua. Ko tenei hangarau kua tino whakamahia i roto i te umanga IT i nga waahi penei i nga whatunga hapori, nga punaha anti-tinihanga, tātaritanga whatunga IT, taunakitanga hapori, hua me nga taunakitanga ihirangi.

Ko te taumahinga papaa raraunga kauwhata i roto i te SQL Server e tika ana mo nga ahuatanga e tino hono ana nga raraunga me nga hononga kua tautuhia pai.

Tauira raraunga kauwhata

Ko te kauwhata he huinga poutoko (nodes, node) me nga tapa (whakawhanaungatanga, tapa). Ko nga poupou e tohu ana i nga hinonga, ko nga taha e tohu ana i nga hononga kei roto o raatau huanga he korero.

Ka whakatauirahia e te papaunga raraunga kauwhata nga hinonga hei kauwhata i tautuhia i te ariā kauwhata. Ko nga hanganga raraunga he poupou me nga tapa. Ko nga huanga he ahuatanga o nga poupou me nga tapa. Ko te hononga he hononga o nga poupou.

Kaore i rite ki etahi atu tauira raraunga, ko nga papaunga raraunga kauwhata e aro nui ana ki nga hononga i waenga i nga hinonga. Na reira, kaore he take ki te tatau i nga hononga ma te whakamahi i nga kii kee, i etahi atu huarahi ranei. Ka taea te hanga tauira raraunga uaua ma te whakamahi i nga tangohanga o runga me te tapa.

I roto i te ao o enei ra, ko te whakatauira i te whanaungatanga me kaha ake nga tikanga mohio. Hei whakatauira i nga hononga, ko te SQL Server 2017 e tuku ana i nga kaha o te putunga raraunga kauwhata. Ko nga pito me nga tapa o te kauwhata e tohuhia ana hei momo ripanga hou: NODE me EDGE. Ka whakamahi nga uiui kauwhata i tetahi mahi T-SQL hou e kiia nei ko MATCH(). I te mea kua hangaia tenei mahi ki roto i te SQL Server 2017, ka taea te whakamahi i roto i o papaunga raraunga o naianei me te kore e hiahia ki te huri i nga raraunga.

Nga Painga o te Tauira Kauwhata

I enei wa, ka tono nga pakihi me nga kaiwhakamahi ki nga tono e mahi ana me te nui ake o nga raraunga, me te tumanako ki te mahi nui me te pono. Ko te whakaaturanga kauwhata o nga raraunga he huarahi pai mo te whakahaere hononga uaua. Ma tenei huarahi e whakaoti rapanga maha me te awhina ki te whai hua i roto i tetahi horopaki.

Te ahua nei he maha nga tono ka whai hua mai i nga papaunga kauwhata a meake nei.

Te Whakatauira Raraunga: Mai i te Paanga ki te Whakatauira Kauwhata

He kupu whakataki ki te SQL Server 2017 Graph Databases
Hei tauira:

Ka titiro tatou ki tetahi tauira o te hanganga whakahaere me te rarangi o nga kaimahi: ka ripoata tetahi kaimahi ki tetahi kaiwhakahaere, ka ripoata tetahi kaiwhakahaere ki tetahi kaiwhakahaere matua, me era atu. I runga i te kamupene motuhake, ka taea te maha o nga taumata i roto i tenei hierarchy. Engari ka piki ake te maha o nga reanga, ka kaha ake te uaua ki te tatau i nga hononga i roto i te papaunga raraunga hononga. He tino uaua ki te whakaaro i te hierarchy o nga kaimahi, te hierarchy i roto i te hokohoko, i nga hononga pāpāho pāpori ranei. Kia kite tatou me pehea e taea ai e SQL Graph te whakaoti i te raru o te whakahaere i nga taumata rereke o te hierarchy.

Mo tenei tauira, me hanga he tauira raraunga ngawari. Waihangahia he tepu kaimahi EMP me te id EMPNO me te poupou M.G.R.A e tohu ana ki te ID o te upoko (kaiwhakahaere) o te kaimahi. Ko nga korero katoa e pa ana ki te hierarchy kei roto i tenei ripanga ka taea te uiui ma te whakamahi i nga pou EMPNO и M.G.R..

He kupu whakataki ki te SQL Server 2017 Graph Databases
Ko te hoahoa e whai ake nei e whakaatu ana i te tauira tūtohi org e wha nga taumata o te kohanga i roto i te ahua mohio ake. Ko nga kaimahi nga poupou o te kauwhata mai i te ripanga EMP. Ko te hinonga "kaimahi" e hono ana ki a ia ano e te hononga "tuku" (ReportsTo). I roto i nga kupu kauwhata, ko te hono he tapa (EDGE) e hono ana i nga pona (NODE) ​​o nga kaimahi.

He kupu whakataki ki te SQL Server 2017 Graph Databases

Me hanga he ripanga auau EMP me te taapiri i nga uara ki reira kia rite ki te hoahoa o runga.

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)

Ko te ahua i raro nei e whakaatu ana i nga kaimahi:

  • kaimahi me EMPNO Ko te 7369 kei raro iho i te 7902;
  • kaimahi me EMPNO 7902 i raro iho i te 7566
  • kaimahi me EMPNO 7566 i raro iho i te 7839

He kupu whakataki ki te SQL Server 2017 Graph Databases
Inaianei ka titiro tatou ki te ahua o nga raraunga ano i te ahua o te kauwhata. He maha nga huanga o te node EMPLOYEE, ka honoa ki a ia ano e tetahi hononga "tuku" (EmplReportsTo). Ko EmplReportsTo te ingoa o te hononga.

He huanga ano pea te ripanga tapa (EDGE).

He kupu whakataki ki te SQL Server 2017 Graph Databases
Waihangatia he ripanga node EmpNode

He tino ngawari te wetereo mo te hanga node: ki te whakapuaki KAUPAPA TUA tāpirihia ki te mutunga HE KORE.

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

Inaianei ka huri tatou i nga raraunga mai i te ripanga noa ki te kauwhata kotahi. Whai muri WHAKAMAHI he whakauru raraunga mai i te ripanga hononga EMP.

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

He kupu whakataki ki te SQL Server 2017 Graph Databases
I roto i te ripanga kōpuku i roto i te tīwae motuhake $node_id_* kei te rongoa te ID kaihautu hei JSON. Kei roto i nga toenga o tenei ripanga nga huanga o te node.

Waihanga Tapa (EDGE)

Ko te hanga ripanga tapa he tino rite ki te hanga ripanga node, engari ko te kupu matua HE EDGE.

CREATE TABLE empReportsTo(Deptno int) AS EDGE

He kupu whakataki ki te SQL Server 2017 Graph Databases

Inaianei me tautuhi nga hononga i waenga i nga kaimahi ma te whakamahi i nga pou EMPNO и M.G.R.. E whakaatu ana te tūtohi org me pehea te tuhi WHAKAMAHI.

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);

Ko te ripanga tapa e toru nga pou taunoa. Tuatahi, $edge_id — te tohu tohu i te ahua o JSON. Ko etahi atu e rua ($from_id и $to_id) e tohu ana i te hononga i waenga i nga pona. I tua atu, ka taea e nga taha te whai taonga taapiri. I roto i to tatou take, tenei Deptno.

Tirohanga Pūnaha

I roto i te tirohanga pūnaha sys.tables E rua nga pou hou:

  1. ko_mata
  2. he_node

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

He kupu whakataki ki te SQL Server 2017 Graph Databases

ssms

Ko nga mea e pa ana ki nga kauwhata kei te kōpaki Ripanga Kauwhata. Ka tohua te ata ripanga node ki te ira, ka tohua te ata ripanga tapa ki nga porowhita hono e rua (he ahua rite ki nga karaihe).

He kupu whakataki ki te SQL Server 2017 Graph Databases

Whakaaturanga MATCH

Nga korero MATCH i tangohia mai i te CQL (Cypher Query Language). He huarahi pai tenei ki te uiui i nga ahuatanga o te kauwhata. Ka timata te CQL ki tetahi korero MATCH.

wetereo

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

tauira

Kia titiro tatou ki etahi tauira.

Ko te patai kei raro nei e whakaatu ana i nga kaimahi i ripoatatia e Smith me tana kaiwhakahaere.

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'

He kupu whakataki ki te SQL Server 2017 Graph Databases
Ko te patai e whai ake nei mo te kimi kaimahi me nga kaiwhakahaere taumata tuarua mo Smith. Mena ka tangohia e koe te tuku HEA, ka whakaatuhia nga kaimahi katoa hei hua.

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'

He kupu whakataki ki te SQL Server 2017 Graph Databases
Ka mutu, he tono mo nga kaimahi taumata-tuatoru me nga kaiwhakahaere.

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'

He kupu whakataki ki te SQL Server 2017 Graph Databases
Inaianei me huri te huarahi ki te tiki i nga rangatira o 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)

He kupu whakataki ki te SQL Server 2017 Graph Databases

mutunga

Ko te SQL Server 2017 kua whakapumautia hei otinga hinonga katoa mo nga momo hiahia IT pakihi. Ko te putanga tuatahi o SQL Graph he tino pai. Ahakoa etahi herenga, kua nui noa atu nga mahi hei tirotiro i nga waahi o nga kauwhata.

Ko te taumahinga SQL Graph kua whakauruhia ki roto i te Miihini SQL. Heoi, pera i te korero kua korerohia, kei a SQL Server 2017 nga here e whai ake nei:

Kaore he tautoko mo te polymorphism.

  • Ko nga hononga kotahi anake e tautokohia ana.
  • Kaore e taea e nga taha te whakahōu i a raatau pou $from_id me $to_id ma te UPDATE.
  • Kaore i te tautokohia nga katinga whakawhiti, engari ka taea te tiki ma te whakamahi i nga CTE.
  • He iti te tautoko mo nga mea OLTP-Mahara-roto.
  • Ko nga ripanga rangitahi (Ripanga Takitahi Putanga-Putanga), kaore i te tautokohia nga ripanga rangitahi o te rohe me te ao.
  • Ko nga momo ripanga me nga taurangi ripanga kaore e taea te korero hei NODE, EDGE ranei.
  • Kaore i te tautokohia nga paatai-paunga raraunga.
  • Karekau he huarahi tika, he momo ruānuku (ruānuku) hei huri i ngā ripanga auau ki ngā ripanga kauwhata.
  • Karekau he GUI hei whakaatu kauwhata, engari ka taea te whakamahi Power BI.

He kupu whakataki ki te SQL Server 2017 Graph Databases

Pānuitia atu:

Source: will.com

Tāpiri i te kōrero