Pasiuna sa SQL Server 2017 Graph Databases

Sa wala pa magsugod ang kurso "MS SQL Server Developer" Nag-andam kami og laing mapuslanong hubad alang kanimo.

Ang mga database sa graph usa ka importante nga teknolohiya alang sa mga propesyonal sa database. Naningkamot ko sa pagpadayon sa mga inobasyon ug bag-ong mga teknolohiya sa niini nga dapit ug, human sa pagtrabaho uban sa relational ug NoSQL databases, akong nakita ang papel sa mga graph database nahimong mas importante. Kung nagtrabaho uban ang komplikado nga hierarchical data, dili lamang ang tradisyonal nga mga database ang dili epektibo, apan usab ang NoSQL. Kasagaran, samtang ang gidaghanon sa mga lebel sa koneksyon ug ang gidak-on sa database nagdugang, ang pasundayag mikunhod. Ug samtang ang mga relasyon nahimong mas komplikado, ang gidaghanon sa mga JOIN nagdugang usab.

Siyempre, ang relational nga modelo adunay mga solusyon alang sa pagtrabaho sa mga hierarchy (pananglitan, gamit ang recursive CTEs), apan kini mga workarounds gihapon. Sa samang higayon, ang pagpaandar sa SQL Server graph databases nagtugot kanimo sa dali nga pagdumala sa daghang lebel sa hierarchy. Parehong ang modelo sa datos ug mga pangutana gipasayon, ug busa ang ilang pagkaepisyente nagdugang. Ang kantidad sa code gikunhuran pag-ayo.

Ang mga database sa graph usa ka ekspresyon nga pinulongan alang sa pagrepresentar sa mga komplikadong sistema. Kini nga teknolohiya kaylap na nga gigamit sa industriya sa IT sa mga lugar sama sa mga social network, anti-fraud system, pagtuki sa network sa IT, mga rekomendasyon sa sosyal, mga rekomendasyon sa produkto ug sulud.

Ang graph database functionality sa SQL Server haom alang sa mga senaryo diin ang data kay interconnected kaayo ug adunay maayong pagka-define nga mga relasyon.

Modelo sa Data sa Grap

Ang graph usa ka hugpong sa mga vertices (nodes) ug mga ngilit (relationships, edge). Ang mga vertices nagrepresentar sa mga entidad, ug ang mga kilid nagrepresentar sa mga relasyon kansang mga kinaiya mahimong adunay impormasyon.

Ang usa ka graph database modelo nga mga entidad ingon usa ka graph ingon nga gipasabut sa teorya sa graph. Ang mga istruktura sa datos mao ang mga vertex ug mga ngilit. Ang mga hiyas mao ang mga kabtangan sa mga vertex ug mga ngilit. Ang koneksyon usa ka koneksyon sa mga vertex.

Dili sama sa ubang mga modelo sa datos, ang mga database sa graph nag-una sa mga relasyon tali sa mga entidad. Busa, dili kinahanglan nga kuwentahon ang mga relasyon gamit ang mga langyaw nga yawe o bisan unsang paagi. Posible ang paghimo og komplikadong mga modelo sa datos gamit lamang ang vertex ug edge abstraction.

Sa modernong kalibutan, ang pagmodelo sa mga relasyon nanginahanglan labi ka komplikado nga mga pamaagi. Aron mamodelo ang mga relasyon, ang SQL Server 2017 nagtanyag mga kapabilidad sa database sa graph. Ang mga vertices ug mga kilid sa graph girepresentahan isip bag-ong matang sa mga lamesa: NODE ug EDGE. Ang mga pangutana sa graph naggamit ug bag-ong T-SQL function nga gitawag ug MATCH(). Tungod kay kini nga pag-andar gitukod sa SQL Server 2017, mahimo kini magamit sa imong naa na nga mga database nga wala kinahanglana ang bisan unsang pagkakabig.

Mga kaayohan sa modelo sa graph

Karon, ang mga negosyo ug tiggamit nanginahanglan mga aplikasyon nga nagdumala sa daghang mga datos, samtang nagpaabut sa taas nga pasundayag ug kasaligan. Ang pagrepresentar sa datos ingon usa ka graph nagtanyag usa ka dali nga paagi sa pagdumala sa mga komplikado nga relasyon. Kini nga pamaagi makasulbad sa daghang mga problema ug makatabang sa pagkuha sa mga resulta sulod sa gihatag nga konteksto.

Morag daghang aplikasyon ang makabenepisyo sa paggamit sa mga database sa graph sa umaabot.

Pagmodelo sa datos: gikan sa relational ngadto sa graph model

Pasiuna sa SQL Server 2017 Graph Databases
Pananglitan:

Atong tan-awon ang usa ka pananglitan sa usa ka istruktura sa organisasyon nga adunay usa ka hierarchy sa mga empleyado: ang usa ka empleyado nagreport sa usa ka manedyer, usa ka manedyer nagreport sa usa ka senior manager, ug uban pa. Depende sa piho nga kompanya, mahimong adunay bisan unsang gidaghanon sa lebel sa kini nga hierarchy. Apan samtang ang gidaghanon sa mga lebel nagdugang, ang pagkalkula sa mga relasyon sa usa ka relational database nahimong mas ug mas komplikado. Lisud mahanduraw ang hierarchy sa mga empleyado, hierarchy sa marketing o koneksyon sa mga social network. Atong tan-awon kung giunsa pagsulbad sa SQL Graph ang problema sa pagdumala sa lainlaing lebel sa hierarchy.

Alang sa kini nga pananglitan maghimo kami usa ka yano nga modelo sa datos. Magbuhat ta ug lamesa sa mga empleyado EMP uban sa ID EMPNO ug kolum Ang MGR, nga nagpakita sa identifier sa superbisor (manager) sa empleyado. Ang tanang impormasyon mahitungod sa hierarchy gitipigan niini nga lamesa ug mahimong pangutan-on gamit ang mga kolum EMPNO ΠΈ Ang MGR.

Pasiuna sa SQL Server 2017 Graph Databases
Ang mosunod nga diagram nagpakita sa samang modelo sa istruktura sa organisasyon nga adunay upat ka lebel sa pagsalag sa mas pamilyar nga porma. Ang mga empleyado mao ang mga vertices sa usa ka graph gikan sa usa ka lamesa EMP. Ang entidad nga "empleyado" konektado sa iyang kaugalingon pinaagi sa koneksyon nga "gisumite" (ReportsTo). Sa mga termino sa graph, ang usa ka link usa ka sulud (EDGE) nga nagkonektar sa mga node (NODE) ​​sa mga empleyado.

Pasiuna sa SQL Server 2017 Graph Databases

Magbuhat ta ug regular nga lamesa EMP ug idugang ang mga kantidad didto sumala sa dayagram sa ibabaw.

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)

Ang hulagway sa ubos nagpakita sa mga empleyado:

  • empleyado uban sa EMPNO 7369 mituman sa 7902;
  • empleyado uban sa EMPNO 7902 misunod sa 7566
  • empleyado uban sa EMPNO 7566 misunod sa 7839

Pasiuna sa SQL Server 2017 Graph Databases
Karon atong tan-awon ang usa ka graph nga representasyon sa parehas nga datos. Ang EMPLOYEE vertex adunay daghang mga hiyas ug konektado sa iyang kaugalingon pinaagi sa relasyon nga "mga sakop" (EmplReportsTo). Ang EmplReportsTo mao ang ngalan sa relasyon.

Ang edge table (EDGE) mahimo usab nga adunay mga attribute.

Pasiuna sa SQL Server 2017 Graph Databases
Magbuhat ta ug node table nga EmpNode

Ang syntax sa paghimo og usa ka node yano ra: sa ekspresyon NAGLIMPANG TABLE gidugang sa katapusan "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;

Karon atong i-convert ang datos gikan sa usa ka regular nga lamesa ngadto sa usa ka graph table. Sunod INSERT nagsal-ot sa datos gikan sa usa ka relational table EMP.

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

Pasiuna sa SQL Server 2017 Graph Databases
Sa lamesa sa mga node sa usa ka espesyal nga kolum $node_id_* ang node identifier gitipigan isip JSON. Ang nahabilin nga mga kolum niini nga lamesa adunay mga hiyas sa node.

Paghimo sa mga ngilit (EDGE)

Ang paghimo ug edge table parehas ra sa paghimo ug node table, gawas nga gigamit ang keyword "AS EDGE".

CREATE TABLE empReportsTo(Deptno int) AS EDGE

Pasiuna sa SQL Server 2017 Graph Databases

Karon atong ipasabut ang mga koneksyon tali sa mga empleyado gamit ang mga kolum EMPNO ΠΈ Ang MGR. Ang diagram sa istruktura sa organisasyon tin-aw nga nagpakita kung giunsa pagsulat 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);

Ang default nga edge nga lamesa naglangkob sa tulo ka mga kolum. Una, $edge_id - edge identifier sa JSON nga porma. Ang laing duha ($from_id ΠΈ $to_id) nagrepresentar sa koneksyon tali sa mga node. Dugang pa, ang mga sulud mahimong adunay dugang nga mga kabtangan. Sa among kaso mao kini Ang Deptno.

Mga Pagtan-aw sa Sistema

Sa pagtan-aw sa sistema sys.tables duha ka bag-ong kolum ang nagpakita:

  1. is_edge
  2. is_node

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

Pasiuna sa SQL Server 2017 Graph Databases

ssms

Ang mga butang nga may kalabutan sa mga graph nahimutang sa folder sa Graph Tables. Ang icon sa lamesa sa node gimarkahan og usa ka tulbok, ug ang icon sa kilid sa lamesa gimarkahan og duha ka konektado nga mga lingin (nga morag mga baso).

Pasiuna sa SQL Server 2017 Graph Databases

MATCH nga ekspresyon

Pagpahayag MATCH gikuha gikan sa CQL (Cypher Query Language). Kini usa ka episyente nga paagi sa pagpangutana sa mga kabtangan sa usa ka graph. Ang CQL nagsugod sa usa ka ekspresyon MATCH.

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_alias

mga panig-ingnan

Atong tan-awon ang pipila ka mga pananglitan.

Ang pangutana sa ubos nagpakita sa mga empleyado nga gi-report ni Smith ug sa iyang manager.

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'

Pasiuna sa SQL Server 2017 Graph Databases
Ang mosunod nga pangutana mao ang pagpangita sa ikaduhang lebel nga mga empleyado ug mga manedyer alang kang Smith. Kung imong tangtangon ang sentence SAAN, unya ang resulta magpakita sa tanang empleyado.

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'

Pasiuna sa SQL Server 2017 Graph Databases
Ug sa katapusan, usa ka hangyo alang sa ikatulo nga lebel nga mga empleyado ug manedyer.

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'

Pasiuna sa SQL Server 2017 Graph Databases
Karon usbon nato ang direksyon aron makuha ang mga amo ni 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)

Pasiuna sa SQL Server 2017 Graph Databases

konklusyon

Ang SQL Server 2017 nagtukod sa kaugalingon ingon usa ka kompleto nga solusyon sa negosyo alang sa lainlaing mga buluhaton sa negosyo sa IT. Ang una nga bersyon sa SQL Graph maayo kaayo. Bisan pa sa pipila ka mga limitasyon, aduna nay igong gamit aron masusi ang mga kapabilidad sa mga graph.

Ang pagpaandar sa SQL Graph hingpit nga gisagol sa SQL Engine. Bisan pa, sama sa giingon na, ang SQL Server 2017 adunay mga musunud nga limitasyon:

Walay polymorphism nga suporta.

  • Ang unidirectional nga koneksyon ra ang gisuportahan.
  • Ang mga edge dili maka-update sa $from_id ug $to_id nga mga kolum pinaagi sa UPDATE.
  • Dili suportado ang mga transitive closure, pero makuha kini gamit ang CTE.
  • Ang suporta alang sa In-Memory OLTP nga mga butang limitado.
  • Temporal nga mga lamesa (System-Versioned Temporal Table), temporaryo nga lokal ug global nga mga lamesa wala gisuportahan.
  • Ang mga tipo sa lamesa ug mga variable sa lamesa dili madeklarar nga NODE o EDGE.
  • Ang mga pangutana sa cross-database wala gisuportahan.
  • Walay direktang paagi o wizard sa pag-convert sa regular nga mga lamesa ngadto sa mga graph table.
  • Walay GUI nga magpakita sa mga graph, apan mahimo nimong gamiton ang Power BI.

Pasiuna sa SQL Server 2017 Graph Databases

Basaha ang dugang pa:

Source: www.habr.com

Idugang sa usa ka comment