1. Ana Sayfa
  2. SQL Server
  3. SQL Server Grafik Veritabanı Nedir?

SQL Server Grafik Veritabanı Nedir?

sqlserver

SQL Server 2017 ile kullanılmaya başlayan karmaşık ve hiyerarşik ilişki yönetimini sağlayan Graph özelliğini yazı içerisinde anlatmaya çalışacağım.

Graph database – Grafik veritabanı – İlişkisel veritabanı sistemleri ve NoSQL veritabanları ile çalışırken yaşadığımız karmaşık hiyerarşik verileri gösterme, ilişki düzeylerinin sayısı ve veritabanı boyutları gibi konularda yaşanan performans sorunlarını gidermesi için kritik önem arz ediyor diyebilirim.

Grafik veritabanı nerelerde kullanabiliriz?

  • Sosyal ağ oluşturmada
  • Dolandırıcılık tespitinde – fraud detection
  • Ürün önerileri
  • BT Ağ analizi
  • Sosyal öneriler

vs şeklinde kullanım alanlarını detaylandırabiliriz.

Grafik veritabanı iki öğeden oluşur.

  • Node: Grafik veritabanı içerisinde varlıkları temsil eder. , çalışan vs
  • Edge: Varlıklar arasında – Node – ilişkiyi temsil eder.

SQL Server Grafik veritabanı hakkında kısa bilgilendirme sonrasında kullanımı hakkında bir demo gerçekleştirelim ve bilgilerimizi pekiştirmiş olalım.

Örnek senaryo: Kişi, Şehir, Takım, Stat ve bunlar arasındaki ilişkileri anlatalım.

İlk adım olarak senaryoyu uygulamak adına aşağıdaki kod bloğu ile “DMCGraph” isimli bir veritabanı oluşturalım.

 

Yukarıdaki kod bloğuna baktığımızda klasik bir tablo oluşturma işlemi gibi olduğunu görebilirsiniz. Tek fark tablo söz diziliminin sonuna “AS NODE” ifadesi ile bir “Node” olduğunu belirtmeniz.

“Users” isimli Node, bir UserID ve ve Username bilgilerinden oluşuyor, node içerisinde Primary key olmasına özen göstermemiz gerekiyor. Bir tablonun node yada edge olup olmadığını kontrol etmek için sys.tables sistem tablosunda bulunan is_node ve is_edge kolonları kullanılır.

select name,is_node,is_edge from sys.tables

Resim-1

Yukarıdaki resimde users isimli tablonun bir node olduğunu görüyoruz. Zaten tanımlamasını yaparken “AS NODE” ile bir node olduğunu belirtmiştik.

Şimdi elimizde users isimli bir graph table var ve buna veri girişi yapalım.

insert into Users values
(‘Çağlar’),(‘Baki’),(‘Çağdaş’),(‘Musa’),(‘Sait’),(‘Burak’)

Şimdi ise users isimli node içeriğini görüntüleyelim.

select * from dbo.Users

Resim-2

Yukarıdaki resimi incelediğinizde tanımlama yaptığımız UserID ve UserName haricinde bir kolon olduğunu görürsünüz. Buradaki veri içeriği ise JSON verileri içerir ve varsayılan sıralama değeri 0’dan başlar.

Benzer şekilde Takım, Stat ve şehir node oluşturalım.

Takım için;

 

 

Şehir için;

 

Grafik veritabanı için ihtiyaç duyacağımız node oluşturduk. Şimdi sırada edge oluşturmaya geldi. TutulanTakim, HangiSehirTakimi ve TakimlarinStad isimli edge oluşturalım.

 

Yukarıdaki kod bloğunu çalıştırdıktan sonra sys.tables üzerinden is_node ve is_edge için gerekli kontrolleri yapalım.

Resim-3

Tanımlamaları Resim-3 de görüldüğü üzere gerçekleştirdik. Şimdi Edge üzerinde insert işlemi yapmaya geldi. Edge, iki veya daha fazla node arasındaki ilişkiyi tanımlamak için kullanılır.

Bir kullanıcının bir takımı tuttuğunu varsayarak TutulanTakim isimli edge üzerine insert işlemi yapalım. Fakat bu işlemi gerçekleştirmeden önce TutulanTakim edge bir görüntüleyelim.

select * from TutulanTakim

Resim-4

Yukarıdaki resimde görüldüğü üzere edge üzerinde 3 adet kolon oluşmuş. Kolon isimlendirmesine baktığımızda aslında node’lar arasındaki ilişkiyi bize anlatır bir yapıdadır.

1 numaralı users için işlem gerçekleştirelim. (1 numaralı kullanıcıyı 1 numaralı ekip ile ilişkilendirdim.)

1 numaralı users için tekrar işlem gerçekleştirelim. (1 numaralı kullanıcıyı 4 numaralı ekip ile ilişkilendirdim.)
[crayon-6095caa51b4a78748622/]
2 numaralı users için tekrar işlem gerçekleştirelim. (2 numaralı kullanıcıyı 3 numaralı ekip ile ilişkilendirdim.)

3 numaralı users için tekrar işlem gerçekleştirelim. (3 numaralı kullanıcıyı 1 numaralı ekip ile ilişkilendirdim.)

1 numaralı takımı,1 numaralı şehir için ekledim.

4 numaralı takımı,2 numaralı şehir için ekledim.

3 numaralı takımı,1 numaralı şehir için ekledim.

TakimlarinStad için de kayıt ekleme işlemi yapalım.

1 numaralı takımı,1 numaralı stat ile eşleştirdim.

2 numaralı takımı,2 numaralı stat ile eşleştirdim.

3 numaralı takımı,3 numaralı stat ile eşleştirdim.

Verilerin görüntülenmesi için;

Select deyiminde where koşulu içerisinde match deyimini belirtmeniz gerekmektedir. Örnek olarak Users’ların tuttuğu takımları görüntülemek için aşağıdaki sorguyu kullanmanız gerekiyor.

 

Yukarıdaki örnekte users node’u olarak, TutulanTakim edge’i tt olarak, teams node’u t olarak isimlendirdim.  Çıktısı aşağıdaki gibidir.

Resim-5

Benzer şekilde farklı bir örnek olarak Hangi Şehir, hangi takıma ev sahipliği yapıyor sorusunun cevabını almak için aşağıdaki sorguyu kullanabiliriz.

 

Resim-6

Teams node için t, HangiSehirTakimi için hst, Cities için c isimlendirmelerini kullandım ve match ile eşleştirme yapmasını sağladım.

Kullanıcıların takımları ve takımların şehirlerinin yer aldığı sorguyu yazmak istersek eğer;

 

Resim-7

Verilerin Silinmesi için;

Edge üzerinden Delete işlemi gerçekleştirmek için $from_id ve $to_id değerlerini belirtmeniz gerekmektedir.

 

Sorguyu çalıştırdıktan sonra Resim-7 sorgusunu tekrar çalıştırdığınızda Trabzonspor bilgisini görmeyeceksiniz. Grafik veritabanları, karmaşık işlemlerden birçok işlemin uygulanma biçimini değiştiriyor.

Bu yazıda, grafik veritabanlarında node ve edgenasıl oluşturulacağını kısaca gözden geçirdik.Ayrıca farklı node arasındaki ilişkilerin nasıl uygulanacağını ve edge ekleme, okuma ve silme işlemlerinin nasıl gerçekleştirileceğini gördük.Bir sonraki yazımızda SQL Server üzerinde Grafik veritabanını kullanarak Twitter için veritabanı tasarımı gerçekleştiriyor olacağız.

Yorum Yap

Yazar Hakkında

Milenyumdan beri ilginç bir merak duygusu ile başlayan bilgisayar ve teknoloji dünyası merakı sayesinde eğitim yaşantımı doğup büyüdüğüm Düzce'de geçirdim. Sonrasında Düzce'nin kendimi geliştirmek adına yeterli imkanlara sahip olmadığından İstanbul'a gelip Bilge Adam Eğitim Kurumlarından Yazılım ve Veritabanı eğitimi aldım. Eğitimimi tamamlarken çeşitli Windows ve Web uygulamaları geliştirdim. Sırası ile Sentez Yazılım, Nebim Yazılım, Ciceksepeti, Doğan Holding, Kariyer.Net, TurkNet gibi firmalarında Yönetici / Müdür pozisyonlarında farklı ünvanlarda ( Yazılım Geliştirici / Raporlama ve Veritabanı Yöneticisi gibi) görev aldım. Şimdilerde ise DMC Bilgi Teknolojileri firmasının Kurucu Ortaklığını ve Veritabanı Danışmalığı Hizmeti vermekteyim.

Yorum Yap