SQL Server 2017 Grafik Veritabanlarına Giriş

Kurs başlamadan önce "MS SQL Server Geliştiricisi" Sizin için faydalı bir çeviri daha hazırladık.

Grafik veritabanları, veritabanı uzmanları için önemli bir teknolojidir. Bu alandaki yenilikleri ve yeni teknolojileri takip etmeye çalışıyorum ve ilişkisel ve NoSQL veritabanları ile çalıştıktan sonra grafik veritabanlarının rolünün giderek arttığını görüyorum. Karmaşık hiyerarşik verilerle çalışırken yalnızca geleneksel veritabanları değil, aynı zamanda NoSQL de etkisizdir. Çoğu zaman, bağlantı düzeylerinin sayısındaki ve veritabanının boyutundaki artışla birlikte performansta bir düşüş olur. Ve ilişkiler daha karmaşık hale geldikçe, JOIN'lerin sayısı da artar.

Elbette, ilişkisel modelde hiyerarşilerle çalışmak için çözümler vardır (örneğin, özyinelemeli CTE'ler kullanmak), ancak bunlar yine de geçici çözümlerdir. Aynı zamanda, SQL Server grafik veritabanlarının işlevselliği, birden çok hiyerarşi düzeyini yönetmeyi kolaylaştırır. Hem veri modeli hem de sorgular basitleştirildi ve dolayısıyla verimlilikleri artırıldı. Kod miktarını önemli ölçüde azaltır.

Grafik veritabanları, karmaşık sistemleri temsil etmek için ifade edici bir dildir. Bu teknoloji halihazırda bilişim sektöründe sosyal ağlar, dolandırıcılık önleme sistemleri, BT ağ analizi, sosyal öneriler, ürün ve içerik önerileri gibi alanlarda oldukça yaygın olarak kullanılmaktadır.

SQL Server'daki grafik veritabanı işlevi, verilerin birbirine yüksek oranda bağlı olduğu ve iyi tanımlanmış ilişkilere sahip olduğu senaryolar için uygundur.

Grafik veri modeli

Grafik, köşeler (düğümler, düğüm) ve kenarlar (ilişkiler, kenar) kümesidir. Köşeler varlıkları temsil eder ve kenarlar, nitelikleri bilgi içerebilen bağlantıları temsil eder.

Bir grafik veri tabanı, varlıkları grafik teorisinde tanımlandığı gibi bir grafik olarak modeller. Veri yapıları köşeler ve kenarlardır. Nitelikler, köşelerin ve kenarların özellikleridir. Bir bağlantı, köşelerin bir bağlantısıdır.

Diğer veri modellerinden farklı olarak, grafik veritabanları varlıklar arasındaki ilişkilere öncelik verir. Bu nedenle, ilişkileri yabancı anahtarlar kullanarak veya başka bir şekilde hesaplamaya gerek yoktur. Yalnızca köşe ve kenar soyutlamalarını kullanarak karmaşık veri modelleri oluşturmak mümkündür.

Günümüz dünyasında, modelleme ilişkileri giderek daha karmaşık teknikler gerektiriyor. İlişkileri modellemek için SQL Server 2017, grafik veritabanı yetenekleri sunar. Grafiğin köşeleri ve kenarları yeni tablo türleri olarak temsil edilir: DÜĞÜM ve KENAR. Grafik sorguları, MATCH() adlı yeni bir T-SQL işlevini kullanır. Bu işlevsellik SQL Server 2017'de yerleşik olduğundan, herhangi bir veritabanı dönüştürmesine gerek kalmadan mevcut veritabanlarınızda kullanılabilir.

Grafik Modelin Faydaları

Günümüzde işletmeler ve kullanıcılar, yüksek performans ve güvenilirlik beklerken, giderek daha fazla veriyle çalışan uygulamalar talep ediyor. Verilerin grafik gösterimi, karmaşık ilişkileri ele almak için uygun bir araç sunar. Bu yaklaşım birçok sorunu çözer ve belirli bir bağlamda sonuç alınmasına yardımcı olur.

Görünüşe göre gelecekte birçok uygulama grafik veritabanlarından faydalanacak.

Veri Modelleme: İlişkisel Modellemeden Grafik Modellemeye

SQL Server 2017 Grafik Veritabanlarına Giriş
Örnek

Çalışan hiyerarşisine sahip bir organizasyon yapısı örneğine bakalım: bir çalışan bir yöneticiye rapor verir, bir yönetici üst düzey bir yöneticiye rapor verir, vb. Belirli şirkete bağlı olarak, bu hiyerarşide herhangi bir sayıda seviye olabilir. Ancak düzey sayısı arttıkça, ilişkisel bir veritabanındaki ilişkileri hesaplamak giderek daha zor hale gelir. Çalışanların hiyerarşisini, pazarlamadaki hiyerarşiyi veya sosyal medya bağlantılarını hayal etmek oldukça zor. SQL Graph'ın farklı hiyerarşi düzeylerini ele alma sorununu nasıl çözebileceğini görelim.

Bu örnek için basit bir veri modeli yapalım. Bir çalışan tablosu oluşturun EMP kimlikli EMPNO ve sütun MGRÇalışanın başkanının (yöneticisinin) kimliğine işaret eden A. Hiyerarşi ile ilgili tüm bilgiler bu tabloda saklanır ve sütunlar kullanılarak sorgulanabilir. EMPNO и MGR.

SQL Server 2017 Grafik Veritabanlarına Giriş
Aşağıdaki diyagram aynı kuruluş şeması modelini daha tanıdık bir biçimde iç içe geçmenin dört düzeyiyle birlikte göstermektedir. Çalışanlar tablodan grafiğin köşeleridir EMP. "Çalışan" varlığı kendisine "gönderenler" (ReportsTo) ilişkisiyle bağlıdır. Grafik terimleriyle, bir bağlantı, çalışanların düğümlerini (NODE'ler) birbirine bağlayan bir kenardır (EDGE).

SQL Server 2017 Grafik Veritabanlarına Giriş

Normal bir tablo oluşturalım. EMP ve yukarıdaki şemaya göre oraya değerler ekleyin.

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)

Aşağıdaki şekil çalışanları göstermektedir:

  • ile çalışan EMPNO 7369, 7902'ye bağlıdır;
  • ile çalışan EMPNO 7902, 7566'ya bağlı
  • ile çalışan EMPNO 7566, 7839'ya bağlı

SQL Server 2017 Grafik Veritabanlarına Giriş
Şimdi aynı verilerin grafik şeklinde temsiline bakalım. EMPLOYEE düğümünün çeşitli öznitelikleri vardır ve kendisine bir "gönderme" ilişkisi (EmplReportsTo) ile bağlıdır. EmplReportsTo, ilişkinin adıdır.

Kenar tablosu (EDGE) ayrıca niteliklere sahip olabilir.

SQL Server 2017 Grafik Veritabanlarına Giriş
Düğüm tablosu oluşturma EmpNode

Bir düğüm oluşturmak için sözdizimi oldukça basittir: ifadeye TABLO OLUŞTUR sonuna eklendi DÜĞÜM OLARAK.

CREATE TABLE dbo.EmpNode(
ID Int Identity(1,1),
EMPNO NUMERIC(4) NOT NULL,
ENAME VARCHAR(10),
MGR NUMERIC(4),
DNO INT
) AS NODE;

Şimdi verileri normal bir tablodan bir grafiğe dönüştürelim. Sonraki INSERT ilişkisel bir tablodan veri ekler EMP.

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

SQL Server 2017 Grafik Veritabanlarına Giriş
Özel bir sütundaki düğüm tablosunda $node_id_* ana bilgisayar kimliği JSON olarak saklanır. Bu tablonun geri kalan sütunları, düğümün özniteliklerini içerir.

Kenarlar Oluştur (KENAR)

Kenar tablosu oluşturmak, anahtar kelimenin dışında, düğüm tablosu oluşturmaya çok benzer. KENAR OLARAK.

CREATE TABLE empReportsTo(Deptno int) AS EDGE

SQL Server 2017 Grafik Veritabanlarına Giriş

Şimdi sütunları kullanarak çalışanlar arasındaki ilişkileri tanımlayalım. EMPNO и MGR. Organizasyon şeması nasıl yazılacağını açıkça gösterir 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);

Edge tablosunun varsayılan olarak üç sütunu vardır. Birinci, $edge_id — JSON biçiminde uç tanımlayıcı. Diğer ikisi ($from_id и $to_id) düğümler arasındaki ilişkiyi temsil eder. Ek olarak, kenarlar ek özelliklere sahip olabilir. Bizim durumumuzda, bu Bölüm.

Sistem Görünümleri

sistem görünümünde sys.tables İki yeni sütun var:

  1. kenar_kenar
  2. is_node

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

SQL Server 2017 Grafik Veritabanlarına Giriş

ssm'ler

Grafiklerle ilgili nesneler Grafik Tabloları klasöründe bulunur. Düğüm tablosu simgesi bir noktayla, kenar tablosu simgesi ise birbirine bağlı iki daireyle (gözlüğe benzeyen) işaretlenmiştir.

SQL Server 2017 Grafik Veritabanlarına Giriş

KAÇINCI ifade

ifade MAÇ CQL'den (Cypher Query Language) alınmıştır. Bu, bir grafiğin özelliklerini sorgulamanın etkili bir yoludur. CQL bir ifadeyle başlar MAÇ.

sözdizimi

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

Örnekler

Birkaç örneğe bakalım.

Aşağıdaki sorgu, Smith ve yöneticisinin rapor verdiği çalışanları gösterir.

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'

SQL Server 2017 Grafik Veritabanlarına Giriş
Aşağıdaki sorgu, Smith için çalışanları ve ikinci düzey yöneticileri bulmak içindir. teklifi kaldırırsanız NEREDE, sonuç olarak tüm çalışanlar görüntülenecektir.

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'

SQL Server 2017 Grafik Veritabanlarına Giriş
Ve son olarak, üçüncü düzey çalışanlar ve yöneticiler için bir talep.

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'

SQL Server 2017 Grafik Veritabanlarına Giriş
Şimdi Smith'in patronlarını almak için yön değiştirelim.

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)

SQL Server 2017 Grafik Veritabanlarına Giriş

Sonuç

SQL Server 2017, çeşitli iş BT ihtiyaçları için eksiksiz bir kurumsal çözüm olarak kendini kanıtlamıştır. SQL Graph'ın ilk sürümü çok umut verici. Bazı sınırlamalara rağmen, grafiklerin olanaklarını keşfetmek için zaten yeterli işlevsellik var.

SQL Graph işlevi, SQL Engine'e tam olarak entegre edilmiştir. Ancak, daha önce de belirtildiği gibi, SQL Server 2017 aşağıdaki sınırlamalara sahiptir:

Polimorfizm için destek yok.

  • Yalnızca tek yönlü bağlantılar desteklenir.
  • Kenarlar, UPDATE aracılığıyla $from_id ve $to_id sütunlarını güncelleyemez.
  • Geçişli kapanışlar desteklenmez, ancak CTE'ler kullanılarak elde edilebilirler.
  • Bellek İçi OLTP nesneleri için sınırlı destek.
  • Geçici tablolar (Sistem Versiyonlu Geçici Tablo), geçici yerel ve genel tablolar desteklenmez.
  • Tablo türleri ve tablo değişkenleri NODE veya EDGE olarak bildirilemez.
  • Veritabanları arası sorgular desteklenmez.
  • Normal tabloları grafik tablolarına dönüştürmenin doğrudan bir yolu veya bir tür sihirbaz (sihirbaz) yoktur.
  • Grafikleri görüntülemek için GUI yoktur, ancak Power BI kullanılabilir.

SQL Server 2017 Grafik Veritabanlarına Giriş

Daha fazla oku:

Kaynak: habr.com

Yorum ekle