Entwodiksyon nan SQL Server 2017 Graph Databases

Anvan kou a kòmanse "MS SQL sèvè Developer" Nou te prepare yon lòt tradiksyon itil pou ou.

Baz done graf yo se yon teknoloji enpòtan pou pwofesyonèl baz done yo. Mwen eseye kenbe ak inovasyon ak nouvo teknoloji nan domèn sa a epi, apre mwen fin travay ak baz done relasyon ak NoSQL, mwen wè wòl baz done graf la vin de pli zan pli enpòtan. Lè w ap travay ak done yerarchik konplèks, pa sèlman baz done tradisyonèl yo efikas, men tou, NoSQL. Souvan, kòm kantite nivo koneksyon ak gwosè baz done a ogmante, pèfòmans diminye. Epi kòm relasyon yo vin pi konplèks, kantite JOIN yo ogmante tou.

Natirèlman, modèl relasyon an gen solisyon pou travay ak yerachi (pa egzanp, lè l sèvi avèk CTE rekursif), men sa yo toujou solisyon. An menm tan an, fonksyonalite baz done graf SQL sèvè pèmèt ou fasilman okipe plizyè nivo yerachi. Tou de modèl done ak demann yo senplifye, ak Se poutèt sa efikasite yo ogmante. Kantite kòd la redwi anpil.

Baz done graf yo se yon langaj ekspresif pou reprezante sistèm konplèks. Teknoloji sa a deja lajman itilize nan endistri IT nan domèn tankou rezo sosyal, sistèm anti-fwod, analiz rezo IT, rekòmandasyon sosyal, rekòmandasyon pwodwi ak kontni.

Fonksyonalite baz done graf la nan SQL sèvè apwopriye pou senaryo kote done yo trè konekte epi yo gen relasyon byen defini.

Modèl Done Grafik

Yon graf se yon seri somè (nœuds) ak bor (relasyon, kwen). Somè reprezante antite, ak bor reprezante relasyon ki gen atribi yo ka genyen enfòmasyon.

Yon baz done graf modèl antite kòm yon graf jan sa defini nan teyori graf. Estrikti done yo se somè ak bor. Atribi yo se pwopriyete somè ak bor. Yon koneksyon se yon koneksyon nan somè.

Kontrèman ak lòt modèl done, baz done graf bay priyorite relasyon ant antite yo. Se poutèt sa, pa gen okenn nesesite pou kalkile relasyon lè l sèvi avèk kle etranje oswa nenpòt lòt mwayen. Li posib pou kreye modèl done konplèks lè l sèvi avèk sèlman abstraksyon somè ak kwen.

Nan mond modèn lan, modèl relasyon mande pou teknik de pli zan pli konplèks. Pou modèl relasyon, SQL Server 2017 ofri kapasite baz done graf. Somè ak bor graf la reprezante kòm nouvo kalite tab: NODE ak EDGE. Rekèt graf yo itilize yon nouvo fonksyon T-SQL ki rele MATCH(). Depi fonksyonalite sa a bati nan SQL Server 2017, li ka itilize nan baz done ki egziste deja ou san yo pa bezwen okenn konvèsyon.

Benefis modèl graf la

Jodi a, biznis ak itilizatè yo mande aplikasyon ki okipe plis ak plis done, pandan y ap atann pèfòmans segondè ak fyab. Reprezante done kòm yon graf ofri yon mwayen pratik pou jere relasyon konplèks. Apwòch sa a rezoud anpil pwoblèm epi li ede jwenn rezilta nan yon kontèks bay yo.

Li sanble ke anpil aplikasyon pral benefisye lè l sèvi avèk baz done graf alavni.

Modèl done: soti nan relasyon ak modèl graf

Entwodiksyon nan SQL Server 2017 Graph Databases
Egzanp

Ann gade nan yon egzanp yon estrikti òganizasyonèl ak yon yerachi nan anplwaye yo: yon anplwaye rapòte bay yon manadjè, yon manadjè rapò bay yon manadjè ansyen, ak sou sa. Tou depan de konpayi an espesifik, ka gen nenpòt ki kantite nivo nan yerachi sa a. Men, kòm kantite nivo ogmante, kalkile relasyon nan yon baz done relasyon vin pi plis ak pi difisil. Li se byen difisil imajine yerachi a nan anplwaye yo, yerachi nan maketing oswa koneksyon nan rezo sosyal. Ann wè ki jan SQL Graph ka rezoud pwoblèm nan manyen diferan nivo yerachi.

Pou egzanp sa a nou pral fè yon modèl done senp. Ann kreye yon tab anplwaye yo PMS ak ID EMPNO ak kolòn M.G.R., ki endike idantifikasyon sipèvizè anplwaye a (manadjè). Tout enfòmasyon sou yerachi a estoke nan tablo sa a epi yo ka mande yo lè l sèvi avèk kolòn EMPNO и M.G.R..

Entwodiksyon nan SQL Server 2017 Graph Databases
Dyagram sa a montre menm modèl estrikti òganizasyonèl la ak kat nivo nidifikasyon nan yon fòm ki pi abitye. Anplwaye yo se somè yon graf ki soti nan yon tablo PMS. Se "anplwaye" antite ki konekte ak tèt li pa koneksyon "soumèt" (ReportsTo). An tèm graf, yon lyen se yon kwen (EDGE) ki konekte nœuds (NODE) ​​nan anplwaye yo.

Entwodiksyon nan SQL Server 2017 Graph Databases

Ann kreye yon tab regilye PMS epi ajoute valè yo an akò ak dyagram ki anwo a.

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)

Foto ki anba a montre anplwaye yo:

  • anplwaye avèk EMPNO 7369 obeyi 7902;
  • anplwaye avèk EMPNO 7902 obeyi 7566
  • anplwaye avèk EMPNO 7566 obeyi 7839

Entwodiksyon nan SQL Server 2017 Graph Databases
Koulye a, ann gade nan yon reprezantasyon graf nan menm done yo. Vètex ANPLWAYE a gen plizyè atribi epi li konekte ak tèt li pa relasyon "sibòdone" (EmplReportsTo). EmplReportsTo se non relasyon an.

Tablo kwen an (EDGE) ka genyen tou atribi.

Entwodiksyon nan SQL Server 2017 Graph Databases
Ann kreye yon tab ne EmpNode

Sentaks la pou kreye yon ne se byen senp: nan ekspresyon an KREYE TAB se ajoute nan fen an "KOM NÒD".

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

Koulye a, ann konvèti done ki soti nan yon tablo regilye nan yon graf youn. Next INSERT foure done ki sòti nan yon tab relasyon PMS.

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

Entwodiksyon nan SQL Server 2017 Graph Databases
Nan tablo a nan nœuds nan yon kolòn espesyal $node_id_* idantifyan ne a estoke kòm JSON. Kolòn ki rete yo nan tablo sa a gen atribi node a.

Kreye kwen (EDGE)

Kreye yon tab kwen se trè menm jan ak kreye yon tab ne, eksepte ke yo itilize mo kle a "KOM BORDO".

CREATE TABLE empReportsTo(Deptno int) AS EDGE

Entwodiksyon nan SQL Server 2017 Graph Databases

Koulye a, kite a defini koneksyon ant anplwaye yo lè l sèvi avèk kolòn EMPNO и M.G.R.. Dyagram estrikti òganizasyonèl la montre klèman kijan pou ekri 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);

Tablo kwen default la konsiste de twa kolòn. Premyèman, $edge_id - idantifyan kwen nan fòm JSON. Lòt de yo ($from_id и $to_id) reprezante koneksyon ki genyen ant nœuds. Anplis de sa, bor yo ka gen pwopriyete adisyonèl. Nan ka nou an se Deptno.

Pwen de vi sistèm

Nan vi sistèm sys.tables de nouvo kolòn parèt:

  1. is_edge
  2. is_node

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

Entwodiksyon nan SQL Server 2017 Graph Databases

ssms

Objè ki gen rapò ak graf yo sitiye nan katab la Graph Tables. Ikòn tab la make ak yon pwen, epi icon tab kwen an make ak de sèk ki konekte (yon ti jan tankou linèt).

Entwodiksyon nan SQL Server 2017 Graph Databases

MATCH ekspresyon

Ekspresyon MATCH pran nan CQL (Cypher Query Language). Sa a se yon fason efikas pou rechèch pwopriyete yon graf. CQL kòmanse ak yon ekspresyon MATCH.

sentaks

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

egzanp

Ann gade kèk egzanp.

Rekèt ki anba a montre anplwaye Smith ak manadjè li a rapòte.

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'

Entwodiksyon nan SQL Server 2017 Graph Databases
Rekèt sa a se pou jwenn anplwaye dezyèm nivo ak manadjè pou Smith. Si ou retire fraz la KI KOTE, Lè sa a, rezilta a pral montre tout anplwaye yo.

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'

Entwodiksyon nan SQL Server 2017 Graph Databases
Epi finalman, yon demann pou anplwaye twazyèm nivo ak manadjè yo.

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'

Entwodiksyon nan SQL Server 2017 Graph Databases
Koulye a, ann chanje direksyon pou jwenn patwon Smith yo.

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)

Entwodiksyon nan SQL Server 2017 Graph Databases

Konklizyon

SQL Server 2017 te etabli tèt li kòm yon solisyon antrepriz konplè pou divès travay IT biznis. Premye vèsyon SQL Graph trè pwomèt. Menm malgre kèk limit, deja gen ase fonksyonalite pou eksplore kapasite graf yo.

Fonksyonalite SQL Graph konplètman entegre nan SQL Engine. Sepandan, jan sa deja di, SQL Server 2017 gen limit sa yo:

Pa gen sipò polimorfis.

  • Se sèlman koneksyon inidiresyonèl yo sipòte.
  • Edges pa ka mete ajou kolòn $from_id ak $to_id atravè UPDATE.
  • Fèmti tranzitif yo pa sipòte, men yo ka jwenn yo lè l sèvi avèk CTE.
  • Sipò pou objè OLTP nan memwa limite.
  • Tablo tanporèl (System-Versioned Temporal Table), tab tanporè lokal ak mondyal yo pa sipòte.
  • Kalite tab ak varyab tab yo pa ka deklare kòm NODE oswa EDGE.
  • Rekèt kwa baz done yo pa sipòte.
  • Pa gen okenn fason dirèk oswa sòsye konvèti tab regilye yo nan tablo graf.
  • Pa gen okenn entèfas pou montre graf, men ou ka itilize Power BI.

Entwodiksyon nan SQL Server 2017 Graph Databases

Li piplis:

Sous: www.habr.com

Add nouvo kòmantè