Pengantar Database Grafik SQL Server 2017

Sebelum memulai kursus "Pengembang MS SQL Server" Kami telah menyiapkan terjemahan lain yang bermanfaat untuk Anda.

Database grafik adalah teknologi penting bagi para profesional database. Saya mencoba mengikuti inovasi dan teknologi baru di bidang ini dan setelah bekerja dengan database relasional dan NoSQL, saya melihat bahwa peran database grafik menjadi semakin banyak. Saat bekerja dengan data hierarkis yang kompleks, tidak hanya database tradisional, tetapi juga NoSQL tidak efektif. Seringkali, dengan bertambahnya jumlah level tautan dan ukuran database, terjadi penurunan kinerja. Dan saat hubungan menjadi lebih kompleks, jumlah GABUNG juga meningkat.

Tentu saja, dalam model relasional ada solusi untuk bekerja dengan hierarki (misalnya, menggunakan CTE rekursif), tetapi ini masih merupakan solusi. Pada saat yang sama, fungsionalitas database grafik SQL Server membuatnya mudah untuk menangani berbagai tingkat hierarki. Model data dan kueri disederhanakan, dan oleh karena itu efisiensinya meningkat. Secara signifikan mengurangi jumlah kode.

Database grafik adalah bahasa ekspresif untuk mewakili sistem yang kompleks. Teknologi ini sudah cukup banyak digunakan di industri TI di berbagai bidang seperti jejaring sosial, sistem anti penipuan, analisis jaringan TI, rekomendasi sosial, rekomendasi produk dan konten.

Fungsionalitas database grafik di SQL Server cocok untuk skenario di mana data sangat saling berhubungan dan memiliki hubungan yang terdefinisi dengan baik.

Model data grafik

Graf adalah kumpulan simpul (node, node) dan edge (hubungan, edge). Simpul mewakili entitas, dan tepi mewakili tautan yang atributnya dapat berisi informasi.

Database grafik memodelkan entitas sebagai grafik seperti yang didefinisikan dalam teori grafik. Struktur data adalah simpul dan tepi. Atribut adalah properti dari simpul dan sisi. Koneksi adalah koneksi simpul.

Tidak seperti model data lainnya, database grafik memprioritaskan hubungan antar entitas. Oleh karena itu, tidak perlu menghitung hubungan menggunakan kunci asing atau dengan cara lain. Dimungkinkan untuk membuat model data yang kompleks hanya dengan menggunakan abstraksi vertex dan edge.

Di dunia sekarang ini, pemodelan hubungan membutuhkan teknik yang semakin canggih. Untuk memodelkan hubungan, SQL Server 2017 menawarkan kemampuan database grafik. Simpul dan tepi grafik direpresentasikan sebagai jenis tabel baru: NODE dan EDGE. Kueri grafik menggunakan fungsi T-SQL baru yang disebut MATCH(). Karena fungsionalitas ini dibangun ke dalam SQL Server 2017, ini dapat digunakan di database Anda yang sudah ada tanpa perlu konversi database apa pun.

Manfaat Model Graf

Saat ini, bisnis dan pengguna menuntut aplikasi yang bekerja dengan lebih banyak data, sambil mengharapkan kinerja dan keandalan yang tinggi. Representasi grafik data menawarkan cara yang nyaman untuk menangani hubungan yang kompleks. Pendekatan ini memecahkan banyak masalah dan membantu mendapatkan hasil dalam konteks tertentu.

Sepertinya banyak aplikasi akan mendapat manfaat dari basis data grafik di masa mendatang.

Pemodelan Data: Dari Pemodelan Relasional ke Grafik

Pengantar Database Grafik SQL Server 2017
Contoh

Mari kita lihat contoh struktur organisasi dengan hierarki karyawan: seorang karyawan melapor ke manajer, manajer melapor ke manajer senior, dan seterusnya. Bergantung pada perusahaan tertentu, mungkin ada sejumlah level dalam hierarki ini. Namun seiring bertambahnya jumlah level, menghitung hubungan dalam database relasional menjadi semakin sulit. Cukup sulit membayangkan hierarki karyawan, hierarki dalam pemasaran atau koneksi media sosial. Mari kita lihat bagaimana Grafik SQL dapat memecahkan masalah penanganan berbagai tingkat hierarki.

Untuk contoh ini, mari buat model data sederhana. Buat tabel karyawan EMP dengan id EMPNO dan kolom MGRA yang menunjuk ke ID kepala (manajer) karyawan. Semua informasi tentang hierarki disimpan dalam tabel ini dan dapat ditanyakan menggunakan kolom EMPNO ΠΈ MGR.

Pengantar Database Grafik SQL Server 2017
Diagram berikut ini juga memperlihatkan model bagan organisasi yang sama dengan empat tingkat nesting dalam bentuk yang lebih familiar. Karyawan adalah simpul grafik dari tabel EMP. Entitas "pegawai" ditautkan ke dirinya sendiri melalui hubungan "kirim" (ReportsTo). Dalam istilah grafik, tautan adalah tepi (EDGE) yang menghubungkan node (NODE) ​​karyawan.

Pengantar Database Grafik SQL Server 2017

Mari buat tabel biasa EMP dan tambahkan nilai di sana sesuai dengan diagram di atas.

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 bawah ini menunjukkan karyawan:

  • karyawan dengan EMPNO 7369 berada di bawah 7902;
  • karyawan dengan EMPNO 7902 di bawah 7566
  • karyawan dengan EMPNO 7566 di bawah 7839

Pengantar Database Grafik SQL Server 2017
Sekarang mari kita lihat representasi data yang sama dalam bentuk grafik. Node EMPLOYEE memiliki beberapa atribut dan ditautkan ke dirinya sendiri oleh hubungan "kirim" (EmplReportsTo). EmplReportsTo adalah nama relasi.

Tabel tepi (EDGE) mungkin juga memiliki atribut.

Pengantar Database Grafik SQL Server 2017
Buat tabel simpul EmpNode

Sintaks untuk membuat simpul cukup sederhana: ke ekspresi BUAT TABEL ditambahkan sampai akhir SEBAGAI 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;

Sekarang mari kita ubah data dari tabel biasa menjadi grafik. Berikutnya MEMASUKKAN menyisipkan data dari tabel relasional EMP.

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

Pengantar Database Grafik SQL Server 2017
Di tabel simpul di kolom khusus $node_id_* ID host disimpan sebagai JSON. Kolom yang tersisa dari tabel ini berisi atribut node.

Buat Tepi (EDGE)

Membuat tabel tepi sangat mirip dengan membuat tabel simpul, kecuali kata kuncinya SEBAGAI TEPI.

CREATE TABLE empReportsTo(Deptno int) AS EDGE

Pengantar Database Grafik SQL Server 2017

Sekarang mari kita definisikan hubungan antar karyawan menggunakan kolom EMPNO ΠΈ MGR. Bagan organisasi dengan jelas menunjukkan cara menulis MEMASUKKAN.

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 tepi memiliki tiga kolom secara default. Pertama, $edge_id β€” pengidentifikasi tepi dalam bentuk JSON. Dua yang lainnya ($from_id ΠΈ $to_id) mewakili hubungan antar node. Selain itu, edge dapat memiliki properti tambahan. Dalam kasus kami, ini Departemen.

Tampilan Sistem

Dalam tampilan sistem sys.tables Ada dua kolom baru:

  1. is_edge
  2. is_node

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

Pengantar Database Grafik SQL Server 2017

ssms

Objek yang terkait dengan grafik terletak di folder Tabel Grafik. Ikon tabel simpul ditandai dengan titik, dan ikon tabel tepi ditandai dengan dua lingkaran yang terhubung (yang terlihat seperti kacamata).

Pengantar Database Grafik SQL Server 2017

ekspresi COCOK

Ekspresi MATCH diambil dari CQL (Cypher Query Language). Ini adalah cara yang efisien untuk menanyakan properti grafik. CQL dimulai dengan ekspresi MATCH.

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

contoh

Mari kita lihat beberapa contoh.

Kueri di bawah menampilkan karyawan yang dilaporkan oleh Smith dan manajernya.

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'

Pengantar Database Grafik SQL Server 2017
Permintaan berikut adalah untuk menemukan karyawan dan manajer tingkat kedua untuk Smith. Jika Anda menghapus penawaran MANA, maka semua karyawan akan ditampilkan sebagai hasilnya.

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'

Pengantar Database Grafik SQL Server 2017
Dan terakhir, permintaan untuk karyawan dan manajer tingkat ketiga.

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'

Pengantar Database Grafik SQL Server 2017
Sekarang mari kita ubah arah untuk mendapatkan 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)

Pengantar Database Grafik SQL Server 2017

Kesimpulan

SQL Server 2017 telah memantapkan dirinya sebagai solusi perusahaan yang lengkap untuk berbagai kebutuhan TI bisnis. Versi pertama dari SQL Graph sangat menjanjikan. Meskipun ada beberapa keterbatasan, sudah ada cukup fungsionalitas untuk mengeksplorasi kemungkinan grafik.

Fungsi SQL Graph terintegrasi penuh ke dalam SQL Engine. Namun, seperti yang telah disebutkan, SQL Server 2017 memiliki batasan berikut:

Tidak ada dukungan untuk polimorfisme.

  • Hanya tautan searah yang didukung.
  • Edge tidak dapat memperbarui kolom $from_id dan $to_id melalui UPDATE.
  • Penutupan transitif tidak didukung, tetapi dapat diperoleh dengan menggunakan CTE.
  • Dukungan terbatas untuk objek OLTP Dalam Memori.
  • Tabel temporer (Tabel Temporal Versi Sistem), tabel sementara lokal dan global tidak didukung.
  • Jenis tabel dan variabel tabel tidak dapat dideklarasikan sebagai NODE atau EDGE.
  • Kueri lintas database tidak didukung.
  • Tidak ada cara langsung atau semacam wizard (penyihir) untuk mengubah tabel biasa menjadi tabel grafik.
  • Tidak ada GUI untuk menampilkan grafik, tetapi Power BI dapat digunakan.

Pengantar Database Grafik SQL Server 2017

Baca selengkapnya:

Sumber: www.habr.com

Tambah komentar