Pambuka kanggo SQL Server 2017 Graph Databases

Sadurunge miwiti kursus "Pengembang MS SQL Server" Kita wis nyiapake terjemahan liyane sing migunani kanggo sampeyan.

Database grafik minangka teknologi penting kanggo profesional basis data. Aku nyoba ngupayakake inovasi lan teknologi anyar ing wilayah iki lan, sawise nggarap database relasional lan NoSQL, aku weruh peran database grafik dadi saya penting. Nalika nggarap data hierarki kompleks, ora mung database tradisional sing ora efektif, nanging uga NoSQL. Asring, minangka jumlah tingkat sambungan lan ukuran database mundhak, kinerja sudo. Lan nalika hubungan dadi luwih rumit, jumlah JOIN uga saya tambah.

Mesthi, model relasional duwe solusi kanggo nggarap hierarki (contone, nggunakake CTE rekursif), nanging iki isih dadi solusi. Ing wektu sing padha, fungsionalitas database grafik SQL Server ngidini sampeyan gampang nangani sawetara tingkat hirarki. Model data lan pitakon disederhanakake, mula efisiensine mundhak. Jumlah kode wis suda banget.

Basis data grafik minangka basa ekspresif kanggo makili sistem kompleks. Teknologi iki wis cukup akeh digunakake ing industri IT ing wilayah kayata jaringan sosial, sistem anti-penipuan, analisis jaringan IT, rekomendasi sosial, produk lan rekomendasi konten.

Fungsi basis data grafik ing SQL Server cocok kanggo skenario ing ngendi data saling nyambungake lan nduweni hubungan sing jelas.

Model data grafik

Grafik yaiku sakumpulan simpul (simpul) lan pinggiran (hubungan, pinggir). Vertices nggambarake entitas, lan pinggiran nuduhake hubungan sing atribut bisa ngemot informasi.

A graph database model entitas minangka grafik minangka ditetepake ing teori graph. Struktur data yaiku vertex lan pinggir. Atribut minangka sifat vertex lan pinggir. Sambungan minangka sambungan saka vertex.

Ora kaya model data liyane, basis data grafik menehi prioritas hubungan antarane entitas. Mulane, ora perlu ngetung hubungan nggunakake tombol manca utawa cara liya. Sampeyan bisa nggawe model data sing kompleks kanthi nggunakake abstraksi vertex lan pinggiran.

Ing donya modern, sesambetan modeling mbutuhake Techniques tambah Komplek. Kanggo model hubungan, SQL Server 2017 nawakake kemampuan database grafik. Pucuk lan pinggiran grafik diwakili minangka jinis tabel anyar: NODE lan EDGE. Pitakonan grafik nggunakake fungsi T-SQL anyar sing diarani MATCH (). Amarga fungsi iki dibangun ing SQL Server 2017, bisa digunakake ing basis data sing wis ana tanpa mbutuhake konversi.

Keuntungan saka model grafik

Dina iki, bisnis lan pangguna nuntut aplikasi sing nangani data luwih akeh, nanging ngarepake kinerja lan linuwih sing dhuwur. Makili data minangka grafik nawakake cara sing trep kanggo nangani hubungan sing kompleks. Pendekatan iki ngrampungake akeh masalah lan mbantu entuk asil ing konteks tartamtu.

Kayane akeh aplikasi bakal entuk manfaat saka nggunakake database grafik ing mangsa ngarep.

Pemodelan data: saka model relasional menyang model grafik

Pambuka kanggo SQL Server 2017 Graph Databases
Conto:

Ayo ndeleng conto struktur organisasi kanthi hierarki karyawan: karyawan laporan menyang manajer, manajer laporan menyang manajer senior, lan liya-liyane. Gumantung ing perusahaan tartamtu, bisa uga ana sawetara level ing hirarki iki. Nanging nalika jumlah tingkat mundhak, ngetung hubungan ing basis data relasional dadi luwih angel. Iku cukup angel mbayangno hirarki karyawan, hirarki ing marketing utawa sambungan ing jaringan sosial. Ayo ndeleng carane SQL Graph bisa ngatasi masalah nangani macem-macem tingkat hirarki.

Kanggo conto iki kita bakal nggawe model data prasaja. Ayo nggawe tabel karyawan EMP karo ID EMPNO lan kolom M.G.R., nuduhake pengenal saka supervisor pegawe (manajer). Kabeh informasi babagan hirarki disimpen ing tabel iki lan bisa ditakoni nggunakake kolom EMPNO ΠΈ M.G.R..

Pambuka kanggo SQL Server 2017 Graph Databases
Diagram ing ngisor iki nuduhake model struktur organisasi sing padha karo papat tingkat nesting ing wangun sing luwih akrab. Karyawan minangka puncak grafik saka tabel EMP. Entitas "karyawan" disambungake menyang dhewe kanthi sambungan "kirim" (ReportsTo). Ing istilah grafik, link minangka pinggiran (EDGE) sing nyambungake simpul (NODE) ​​karyawan.

Pambuka kanggo SQL Server 2017 Graph Databases

Ayo nggawe tabel biasa EMP lan tambahake nilai-nilai ing kana sesuai karo diagram ing ndhuwur.

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)

Gambar ing ngisor iki nuduhake karyawan:

  • karyawan karo EMPNO 7369 manut 7902;
  • karyawan karo EMPNO 7902 manut 7566
  • karyawan karo EMPNO 7566 manut 7839

Pambuka kanggo SQL Server 2017 Graph Databases
Saiki ayo goleki perwakilan grafik saka data sing padha. Pucuk EMPLOYEE duwe sawetara atribut lan disambungake karo hubungan "bawahan" (EmplReportsTo). EmplReportsTo iku jeneng hubungan.

Tabel pinggiran (EDGE) uga bisa ngemot atribut.

Pambuka kanggo SQL Server 2017 Graph Databases
Ayo nggawe tabel simpul EmpNode

Sintaks kanggo nggawe simpul cukup prasaja: kanggo ekspresi Gawe Tabel ditambahake nganti pungkasan "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;

Saiki ayo ngowahi data saka tabel biasa menyang tabel grafik. Sabanjure INSERT nglebokake data saka tabel relasional EMP.

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

Pambuka kanggo SQL Server 2017 Graph Databases
Ing tabel simpul ing kolom khusus $node_id_* pengenal simpul disimpen minangka JSON. Kolom sing isih ana ing tabel iki ngemot atribut simpul.

Nggawe pinggiran (EDGE)

Nggawe tabel pinggiran meh padha karo nggawe tabel simpul, kajaba tembung kunci digunakake "AS EDGE".

CREATE TABLE empReportsTo(Deptno int) AS EDGE

Pambuka kanggo SQL Server 2017 Graph Databases

Saiki ayo nemtokake sambungan antarane karyawan nggunakake kolom EMPNO ΠΈ M.G.R.. Diagram struktur organisasi kanthi jelas nuduhake carane nulis 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);

Tabel pinggir gawan kasusun saka telung kolom. pisanan, $edge_id - pengenal pinggiran ing wangun JSON. Loro liyane ($from_id ΠΈ $to_id) makili sambungan antarane node. Kajaba iku, pinggiran bisa duwe sifat tambahan. Ing kasus kita iku Deptno.

Tampilan Sistem

Ing tampilan sistem sys.tables rong kolom anyar wis katon:

  1. is_edge
  2. is_node

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

Pambuka kanggo SQL Server 2017 Graph Databases

ssms

Obyek sing ana gandhengane karo grafik ana ing folder Tabel Grafik. Lambang meja simpul ditandhani karo titik, lan lambang meja pinggiran ditandhani karo loro bunderan disambungake (dicokot kaya kaca tingal).

Pambuka kanggo SQL Server 2017 Graph Databases

ekspresi MATCH

Babagan MATCH dijupuk saka CQL (Cypher Query Language). Iki minangka cara sing efisien kanggo pitakon sifat grafik. CQL diwiwiti kanthi ekspresi MATCH.

sintaks

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

conto

Ayo katon ing sawetara conto.

Pitakonan ing ngisor iki nampilake karyawan sing dilaporake Smith lan manajer.

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'

Pambuka kanggo SQL Server 2017 Graph Databases
Pitakonan ing ngisor iki kanggo nemokake karyawan lan manajer tingkat kapindho kanggo Smith. Yen sampeyan mbusak ukara ngendi, banjur asil bakal nampilake kabeh karyawan.

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'

Pambuka kanggo SQL Server 2017 Graph Databases
Lan pungkasane, panjaluk karyawan lan manajer tingkat katelu.

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'

Pambuka kanggo SQL Server 2017 Graph Databases
Saiki ayo ngganti arah kanggo njaluk panggedhe 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)

Pambuka kanggo SQL Server 2017 Graph Databases

kesimpulan

SQL Server 2017 wis dadi solusi perusahaan lengkap kanggo macem-macem tugas bisnis IT. Versi pisanan saka SQL Graph banget njanjeni. Sanajan ana sawetara watesan, wis ana fungsi sing cukup kanggo njelajah kemampuan grafik.

Fungsi SQL Graph digabungake kanthi lengkap menyang SQL Engine. Nanging, kaya sing wis kasebut, SQL Server 2017 duwe watesan ing ngisor iki:

Ora ana dhukungan polimorfisme.

  • Mung sambungan siji arah sing didhukung.
  • Edges ora bisa nganyari $from_id lan $to_id kolom liwat UPDATE.
  • Penutupan transitif ora didhukung, nanging bisa dipikolehi nggunakake CTE.
  • Dhukungan kanggo obyek In-Memory OLTP diwatesi.
  • Tabel temporal (Tabel Temporal Versi Sistem), tabel lokal lan global sauntara ora didhukung.
  • Jinis tabel lan variabel tabel ora bisa diumumake minangka NODE utawa EDGE.
  • Pitakonan lintas-database ora didhukung.
  • Ora ana cara langsung utawa tuntunan kanggo ngowahi tabel biasa dadi tabel grafik.
  • Ora ana GUI kanggo nampilake grafik, nanging sampeyan bisa nggunakake Power BI.

Pambuka kanggo SQL Server 2017 Graph Databases

Waca liyane:

Source: www.habr.com

Add a comment