Fampidirana ny SQL Server 2017 Graph Databases

Alohan'ny hanombohan'ny fampianarana "MS SQL Server Developer" Nanomana fandikan-teny mahasoa hafa ho anao izahay.

Ny angon-drakitra graph dia teknolojia manan-danja ho an'ny matihanina amin'ny database. Miezaka ny manaraka ny fanavaozana sy ny teknolojia vaovao amin'ity sehatra ity aho ary rehefa avy niasa tamin'ny angon-drakitra relational sy NoSQL dia hitako fa mihamitombo hatrany ny anjara asan'ny angon-drakitra grafika. Rehefa miasa miaraka amin'ny angon-drakitra hierarchical sarotra, tsy ny angon-drakitra nentim-paharazana ihany, fa koa ny NoSQL dia tsy mahomby. Matetika, miaraka amin'ny fitomboan'ny haavon'ny rohy sy ny haben'ny angon-drakitra, misy ny fihenan'ny fampisehoana. Ary rehefa mihasarotra ny fifandraisana dia mitombo ihany koa ny isan'ny JOIN.

Mazava ho azy, ao amin'ny modely relational dia misy vahaolana amin'ny fiaraha-miasa amin'ny ambaratongam-pahefana (ohatra, ny fampiasana CTEs recursive), saingy mbola azo atao ihany izany. Mandritra izany fotoana izany, ny fiasan'ny angon-drakitra grafika SQL Server dia manamora ny fitantanana ambaratonga maromaro. Na ny maodely angon-drakitra sy ny fanontaniana dia notsorina, ary noho izany dia mitombo ny fahombiazany. Mampihena be ny habetsaky ny kaody.

Ny angon-drakitra graph dia fiteny maneho hevitra hanehoana rafitra sarotra. Ity teknolojia ity dia efa be mpampiasa amin'ny indostrian'ny IT amin'ny sehatra toy ny tambajotra sosialy, rafitra miady amin'ny hosoka, famakafakana tambajotra IT, tolo-kevitra ara-tsosialy, tolo-kevitra momba ny vokatra sy votoaty.

Ny fampiasa angon-drakitra amin'ny grafika ao amin'ny SQL Server dia mety amin'ny toe-javatra misy ny angon-drakitra mifandray be dia be ary manana fifandraisana voafaritra tsara.

Modely angona graph

Ny graph dia fitambarana vertices (nodes, node) sy sisiny (fifandraisana, sisiny). Ny vertices dia maneho ny enti-manana, ary ny sisiny dia maneho rohy misy ny toetrany mety ahitana fampahalalana.

Ny angon-drakitra grafika dia mamolavola singa ho toy ny grafika araka ny voafaritra ao amin'ny teoria graph. Ny firafitry ny angona dia vertex sy sisiny. Ny toetra dia toetran'ny vertices sy ny sisiny. Ny fifandraisana dia fifandraisana amin'ny vertex.

Tsy sahala amin'ny maodely data hafa, ny angon-drakitra grafika dia manome laharam-pahamehana ny fifandraisana eo amin'ny sampana. Noho izany, tsy ilaina ny mikajy ny fifandraisana amin'ny fampiasana fanalahidy vahiny na amin'ny fomba hafa. Azo atao ny mamorona modely angon-drakitra sarotra amin'ny fampiasana vertex sy sisiny abstractions.

Amin'izao tontolo izao ankehitriny, ny fifandraisana modely dia mitaky teknika be pitsiny kokoa. Ho modely fifandraisana, SQL Server 2017 dia manolotra fahaiza-manao angona angona. Ny vertices sy ny sisin'ny grafika dia aseho ho karazana tabilao vaovao: NODE sy EDGE. Ny fangatahana grafika dia mampiasa fiasa T-SQL vaovao antsoina hoe MATCH(). Satria io fampiasa io dia natsangana tao amin'ny SQL Server 2017, dia azo ampiasaina amin'ny angon-drakitra misy anao tsy mila fiovam-po.

Tombontsoa azo avy amin'ny maodely Graph

Amin'izao fotoana izao, ny orinasa sy ny mpampiasa dia mitaky fampiharana izay miasa miaraka amin'ny angon-drakitra bebe kokoa, ary manantena ny fahombiazany sy ny fahatokisana. Ny fanehoana an-tsary ny angon-drakitra dia manolotra fomba mety amin'ny fikarakarana fifandraisana sarotra. Ity fomba fiasa ity dia mamaha olana maro ary manampy amin'ny fahazoana vokatra ao anatin'ny toe-javatra iray.

Toa fampiharana maro no hahazo tombony amin'ny angon-drakitra grafika amin'ny ho avy.

Data Modeling: Avy amin'ny fifandraisana amin'ny graph modeling

Fampidirana ny SQL Server 2017 Graph Databases
ohatra

Andeha hojerentsika ny ohatra momba ny rafi-pandaminana misy ambaratongan'ny mpiasa: ny mpiasa dia mitatitra amin'ny mpitantana iray, ny mpitantana mitatitra amin'ny mpitantana ambony, sns. Miankina amin'ny orinasa manokana, mety misy ambaratonga maromaro amin'ity ambaratonga ity. Saingy rehefa mitombo ny isan'ny ambaratonga dia mihasarotra ny kajy ny fifandraisana amin'ny angon-drakitra relational. Sarotra ny maka sary an-tsaina ny ambaratongan'ny mpiasa, ny ambaratongan'ny varotra na ny fifandraisana amin'ny media sosialy. Andeha hojerentsika ny fomba ahafahan'ny SQL Graph mamaha ny olan'ny fitantanana ambaratonga samihafa.

Ho an'ity ohatra ity, andeha isika hanao maodely data tsotra. Mamorona latabatra mpiasa PMS miaraka id EMPNO ary tsanganana M.G.R.A izay manondro ny ID ny lohan'ny (mpitantana) ny mpiasa. Ny fampahalalana rehetra momba ny ambaratonga dia voatahiry ato amin'ity tabilao ity ary azo angatahina amin'ny fampiasana tsanganana EMPNO ΠΈ M.G.R..

Fampidirana ny SQL Server 2017 Graph Databases
Ity kisary manaraka ity koa dia mampiseho ny maodely tabilao org misy ambaratonga efatra amin'ny akany amin'ny endrika mahazatra kokoa. Ny mpiasa dia ny vertices amin'ny grafika avy amin'ny latabatra PMS. Ny orinasa "mpiasa" dia mifamatotra amin'ny tenany amin'ny fifandraisana "manatitra" (ReportsTo). Amin'ny teny grafika, ny rohy dia sisiny (EDGE) izay mampifandray ny nodes (NODEs) an'ny mpiasa.

Fampidirana ny SQL Server 2017 Graph Databases

Andao hamorona latabatra mahazatra PMS ary ampio ny soatoavina eo araka ny kisary etsy ambony.

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)

Ny sary eto ambany dia mampiseho ny mpiasa:

  • mpiasa miaraka amin'ny EMPNO Ny 7369 dia 7902 ;
  • mpiasa miaraka amin'ny EMPNO Ny kaodim-paositra dia 7902.
  • mpiasa miaraka amin'ny EMPNO Ny kaodim-paositra dia 7566.

Fampidirana ny SQL Server 2017 Graph Databases
Andeha hojerentsika izao ny fanehoana ireo angona mitovy amin'ny endrika grafika. Ny node EMPLOYEE dia manana toetra maromaro ary mifamatotra amin'ny tenany amin'ny fifandraisana "manatitra" (EmplReportsTo). EmplReportsTo no anaran'ny fifandraisana.

Mety manana toetra koa ny latabatra sisiny (EDGE).

Fampidirana ny SQL Server 2017 Graph Databases
Mamorona latabatra node EmpNode

Ny syntax amin'ny famoronana node dia tsotra: amin'ny fiteny Mamorona TABLE nampiana hatramin’ny farany 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;

Andao izao hamadika ny angona avy amin'ny tabilao mahazatra ho iray amin'ny grafika. Manaraka ampidiro eto mampiditra angona avy amin'ny latabatra fifandraisana PMS.

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

Fampidirana ny SQL Server 2017 Graph Databases
Ao amin'ny latabatra node amin'ny tsanganana manokana $node_id_* ny ID mpampiantrano dia voatahiry ho JSON. Ny tsanganana sisa amin'ity tabilao ity dia ahitana ny toetran'ny node.

Mamorona sisiny (EDGE)

Ny famoronana latabatra sisiny dia mitovy amin'ny famoronana latabatra node, afa-tsy ny teny fototra AS EDGE.

CREATE TABLE empReportsTo(Deptno int) AS EDGE

Fampidirana ny SQL Server 2017 Graph Databases

Andeha isika hamaritra ny fifandraisana eo amin'ny mpiasa mampiasa tsanganana EMPNO ΠΈ M.G.R.. Ny tabilao org dia mampiseho mazava ny fomba fanoratana ampidiro eto.

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

Ny latabatra sisiny dia manana tsanganana telo raha ny mahazatra. Voalohany, $edge_id - famantarana ny sisiny amin'ny endrika JSON. Ny roa hafa ($from_id ΠΈ $to_id) maneho ny fifandraisana eo amin'ny nodes. Ankoatra izany, ny sisiny dia mety manana fananana fanampiny. Amin'ity tranga ity, ity Deptno.

System Views

Ao amin'ny system view sys.tables Misy tsanganana roa vaovao:

  1. is_edge
  2. is_node

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

Fampidirana ny SQL Server 2017 Graph Databases

ssms

Ny zavatra mifandraika amin'ny grafika dia hita ao amin'ny lahatahiry Graph Tables. Ny kisary latabatra node dia voamarika amin'ny teboka, ary ny kisary latabatra amin'ny sisiny dia voamarika amin'ny faribolana roa mifandray (izay mitovy amin'ny solomaso).

Fampidirana ny SQL Server 2017 Graph Databases

MATCH expression

teny lalao nalaina avy amin'ny CQL (Cypher Query Language). Ity dia fomba mahomby ahafahana manontany ny toetran'ny grafika. CQL dia manomboka amin'ny fanehoan-kevitra lalao.

Syntaxe

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

ohatra

Andeha isika hijery ohatra vitsivitsy.

Ny fanontaniana etsy ambany dia mampiseho ireo mpiasa izay taterin'i Smith sy ny mpitantana azy.

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'

Fampidirana ny SQL Server 2017 Graph Databases
Ity fanontaniana manaraka ity dia ny fitadiavana mpiasa sy mpitantana ambaratonga faharoa ho an'i Smith. Raha esorinao ny tolotra AIZA, dia haseho avokoa ny mpiasa rehetra vokatr'izany.

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'

Fampidirana ny SQL Server 2017 Graph Databases
Ary farany, fangatahana mpiasa sy mpitantana ambaratonga fahatelo.

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'

Fampidirana ny SQL Server 2017 Graph Databases
Andeha isika hanova ny lalana hahazoana ny lehiben'i 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)

Fampidirana ny SQL Server 2017 Graph Databases

famaranana

Ny SQL Server 2017 dia nametraka ny tenany ho vahaolana orinasa feno ho an'ny filana IT isan-karazany. Ny dikan-teny voalohany amin'ny SQL Graph dia tena mampanantena. Na dia eo aza ny fetra sasany, dia efa ampy ny fampiasa mba hijerena ny fahafahan'ny grafika.

Ny fampiasa SQL Graph dia tafiditra tanteraka amin'ny SQL Engine. Na izany aza, araka ny efa voalaza, ny SQL Server 2017 dia manana fetra manaraka ireto:

Tsy misy fanohanana ny polymorphisme.

  • Rohy tokana tokana ihany no tohana.
  • Tsy afaka manavao ny tsanganany $from_id sy $to_id amin'ny alalan'ny UPDATE ny Edges.
  • Ny fanakatonana transitive dia tsy tohanana, fa azo alaina amin'ny fampiasana CTE.
  • Fanohanana voafetra ho an'ny zavatra In-Memory OLTP.
  • Ny latabatra ara-potoana (System-Versioned Temporal Table), ny tabilao eo an-toerana sy maneran-tany vonjimaika dia tsy tohana.
  • Tsy azo ambara ho NODE na EDGE ny karazana tabilao sy ny faribolan'ny latabatra.
  • Ny fangatahana cross-database dia tsy tohanana.
  • Tsy misy fomba mivantana na karazana mpamosavy (ombiasy) hamadika tabilao mahazatra ho tabilao tabilao.
  • Tsy misy GUI hanehoana sary, fa azo ampiasaina ny Power BI.

Fampidirana ny SQL Server 2017 Graph Databases

Hamaky bebe kokoa:

Source: www.habr.com

Add a comment