Bubuka pikeun SQL Server 2017 Grafik Databases

Sateuacan ngamimitian kursus "Pamekar MS SQL Server" Kami parantos nyiapkeun tarjamahan anu mangpaat pikeun anjeun.

Basis data grafik mangrupikeun téknologi penting pikeun profésional pangkalan data. Kuring nyobian tetep sareng inovasi sareng téknologi anyar di daérah ieu sareng, saatos damel sareng database relational sareng NoSQL, kuring ningali peran database grafik janten langkung penting. Nalika damel sareng data hirarki kompleks, henteu ngan ukur basis data tradisional anu henteu efektif, tapi ogé NoSQL. Seringna, nalika jumlah tingkat sambungan sareng ukuran database naék, kinerja turun. Sareng nalika hubungan janten langkung kompleks, jumlah JOIN ogé ningkat.

Tangtu, model relational boga solusi pikeun gawé bareng hierarchies (contona, ngagunakeun CTEs recursive), tapi ieu masih workarounds. Dina waktu nu sarua, pungsionalitas database grafik SQL Server ngidinan Anjeun pikeun gampang nanganan sababaraha tingkat hirarki. Boh modél data sareng patarosan disederhanakeun, sareng ku kituna efisiensina ningkat. Jumlah kode diréduksi sacara signifikan.

Basis data grafik mangrupa basa ekspresif pikeun ngagambarkeun sistem kompléks. Téknologi ieu parantos seueur dianggo dina industri IT di daérah sapertos jaringan sosial, sistem anti panipuan, analisis jaringan IT, rekomendasi sosial, produk sareng rekomendasi eusi.

Fungsionalitas databés grafik dina SQL Server cocog pikeun skénario dimana data saling nyambung pisan sareng hubungan anu jelas.

Modél Data Grafik

Grafik nyaéta sakumpulan titik (titik) jeung sisi (hubungan, tepi). Vertices ngagambarkeun éntitas, sarta edges ngagambarkeun hubungan anu atribut bisa ngandung informasi.

A graph database model éntitas salaku grafik sakumaha didefinisikeun dina téori grafik. Struktur data mangrupa verteks jeung edges. Atribut mangrupa sipat vertex jeung edges. Sambungan nyaéta sambungan tina vertex.

Teu kawas model data sejen, database grafik prioritas hubungan antara éntitas. Ku alatan éta, teu kudu ngitung hubungan maké konci asing atawa cara séjén. Kasebut nyaéta dimungkinkeun pikeun nyieun model data kompléks ngagunakeun ukur vertex jeung abstraksi tepi.

Di dunya modern, hubungan modeling merlukeun téhnik beuki kompleks. Pikeun model hubungan, SQL Server 2017 nawarkeun kamampuhan database grafik. Pucuk sareng ujung grafik digambarkeun salaku jinis tabel énggal: NODE sareng EDGE. queries grafik ngagunakeun fungsi T-SQL anyar disebut MATCH (). Kusabab fungsionalitas ieu diwangun kana SQL Server 2017, éta tiasa dianggo dina pangkalan data anjeun anu tos aya tanpa peryogi konvérsi.

Mangpaat model grafik

Kiwari, usaha sareng pangguna nungtut aplikasi anu nanganan langkung seueur data, bari ngarepkeun kinerja sareng reliabilitas anu luhur. Ngawakilan data salaku grafik nawarkeun cara merenah pikeun nanganan hubungan kompléks. Pendekatan ieu ngarengsekeun seueur masalah sareng ngabantosan hasil dina kontéks anu ditangtukeun.

Sigana seueur aplikasi anu bakal nguntungkeun tina ngagunakeun database grafik di hareup.

Modeling data: ti relational ka model grafik

Bubuka pikeun SQL Server 2017 Grafik Databases
conto

Hayu urang tingali conto struktur organisasi kalayan hirarki karyawan: pagawe ngalaporkeun ka manajer, manajer ngalaporkeun ka manajer senior, jeung saterusna. Gumantung kana perusahaan husus, meureun aya sababaraha tingkat dina hirarki ieu. Tapi sakumaha jumlah tingkat naek, ngitung hubungan dina database relational jadi beuki loba hésé. Rada hese ngabayangkeun hierarki karyawan, hirarki dina pamasaran atanapi sambungan dina jaringan sosial. Hayu urang tingali kumaha SQL Graph tiasa ngabéréskeun masalah nanganan tingkat hirarki anu béda.

Pikeun conto ieu urang bakal nyieun model data basajan. Hayu urang nyieun tabel karyawan PMS kalawan ID EMPNO jeung kolom M.G.R., nunjukkeun identifier of supervisor pagawe (manajer). Sadaya inpormasi ngeunaan hirarki disimpen dina tabel ieu sareng tiasa ditaros nganggo kolom EMPNO и M.G.R..

Bubuka pikeun SQL Server 2017 Grafik Databases
Diagram di handap nembongkeun model struktur organisasi sarua jeung opat tingkat nyarang dina formulir leuwih akrab. Karyawan mangrupikeun titik-titik tina grafik tina méja PMS. Éntitas "karyawan" disambungkeun ka dirina ku sambungan "ngalebetkeun" (ReportsTo). Dina istilah grafik, tautan mangrupikeun ujung (EDGE) anu nyambungkeun titik (NODE) ​​karyawan.

Bubuka pikeun SQL Server 2017 Grafik Databases

Hayu urang nyieun tabel biasa PMS sareng tambahkeun nilai-nilai anu aya saluyu sareng diagram di luhur.

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 di handap ieu nunjukkeun karyawan:

  • pagawe kalawan EMPNO 7369 nurut 7902;
  • pagawe kalawan EMPNO 7902 nurut 7566
  • pagawe kalawan EMPNO 7566 nurut 7839

Bubuka pikeun SQL Server 2017 Grafik Databases
Ayeuna hayu urang tingali dina ngagambarkeun grafik tina data anu sarua. The EMPLOYEE vertex boga sababaraha atribut jeung disambungkeun ka dirina ku hubungan "bawahan" (EmplReportsTo). EmplReportsTo nyaéta nami hubungan.

Méja tepi (EDGE) ogé tiasa ngandung atribut.

Bubuka pikeun SQL Server 2017 Grafik Databases
Hayu urang nyieun tabel titik EmpNode

Sintaksis pikeun nyieun titik cukup saderhana: pikeun éksprési NYiptakeun Tabel ditambahkeun kana tungtungna "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;

Ayeuna hayu urang ngarobah data tina tabel biasa kana grafik. Teras INSERT inserts data tina tabel relasional PMS.

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

Bubuka pikeun SQL Server 2017 Grafik Databases
Dina tabel titik dina kolom husus $node_id_* identifier titik disimpen salaku JSON. Kolom sésana tina tabel ieu ngandung atribut titik urang.

Nyieun edges (EDGE)

Nyieun hiji méja ujung pisan sarupa nyieun hiji méja titik, iwal kecap konci dipaké "AS EDGE".

CREATE TABLE empReportsTo(Deptno int) AS EDGE

Bubuka pikeun SQL Server 2017 Grafik Databases

Ayeuna hayu urang nangtukeun sambungan antara pagawé ngagunakeun kolom EMPNO и M.G.R.. Diagram struktur organisasi jelas nunjukkeun kumaha cara nyerat 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);

Méja ujung standar diwangun ku tilu kolom. kahiji, $edge_id - identifier tepi dina bentuk JSON. Dua deui ($from_id и $to_id) ngagambarkeun sambungan antara titik. Sajaba ti éta, edges bisa mibanda sipat tambahan. Dina hal urang éta Deptno.

System Views

Dina panempoan sistem sys.tables dua kolom anyar parantos muncul:

  1. is_edge
  2. is_node

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

Bubuka pikeun SQL Server 2017 Grafik Databases

sms

Objék nu patali jeung grafik aya dina folder Graph Tables. Ikon tabel titik ditandaan ku titik, sarta ikon tabel ujung ditandaan ku dua bunderan disambungkeun (saeutik kawas gelas).

Bubuka pikeun SQL Server 2017 Grafik Databases

éksprési cocog

Babasan pertandingan dicokot tina CQL (Cypher Query Language). Ieu mangrupikeun cara anu épisién pikeun naroskeun sipat grafik. CQL dimimitian ku éksprési pertandingan.

sintaksis

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

Hayu urang nempo sababaraha conto.

Patarosan di handap nembongkeun karyawan ka saha Smith jeung manajer na ngalaporkeun.

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'

Bubuka pikeun SQL Server 2017 Grafik Databases
Patarosan di handap ieu pikeun milarian karyawan tingkat kadua sareng manajer pikeun Smith. Lamun ngaleungitkeun kalimah WHERE, teras hasilna bakal ningalikeun sadaya 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'

Bubuka pikeun SQL Server 2017 Grafik Databases
Sarta pamustunganana, pamundut pikeun karyawan tingkat katilu jeung manajer.

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'

Bubuka pikeun SQL Server 2017 Grafik Databases
Ayeuna hayu urang robih arah pikeun nyandak bos 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)

Bubuka pikeun SQL Server 2017 Grafik Databases

kacindekan

SQL Server 2017 parantos netepkeun dirina salaku solusi perusahaan lengkep pikeun sagala rupa tugas bisnis IT. Versi munggaran SQL Graph pisan ngajangjikeun. Sanaos sababaraha watesan, parantos aya pungsionalitas anu cekap pikeun ngajalajah kamampuan grafik.

fungsionalitas SQL Graph pinuh terpadu kana SQL Engine. Nanging, sakumaha anu parantos nyatakeun, SQL Server 2017 ngagaduhan watesan ieu:

Taya rojongan polymorphism.

  • Ngan sambungan saarah anu dirojong.
  • Edges teu bisa ngamutahirkeun $from_id jeung $to_id kolom via UPDATE.
  • Panutup transitif henteu dirojong, tapi tiasa didapet nganggo CTE.
  • Rojongan pikeun objék OLTP Dina Mémori diwatesan.
  • Tabel temporal (System-Vérsioned Temporal Table), samentara tabel lokal jeung global teu dirojong.
  • Jenis tabel sarta variabel tabel teu bisa dinyatakeun salaku NODE atanapi EDGE.
  • Patarosan cross-database teu dirojong.
  • Teu aya cara langsung atanapi wizard pikeun ngarobih tabel biasa kana tabel grafik.
  • Henteu aya GUI pikeun nampilkeun grafik, tapi anjeun tiasa nganggo Power BI.

Bubuka pikeun SQL Server 2017 Grafik Databases

Maca deui:

sumber: www.habr.com

Tambahkeun komentar