Nested Set Model

Merhaba arkadaşlar bu yazımızda parent yapısında sorgulama işlerimizi oldukça kolaylaştıran nested set modeli inceleyeceğiz ve bu modeli .net ile nasıl oluşturabiliriz ona bakacağız.

Nested Set Model

 

Resimde bir alışveriş sitesine ait nested set yapısı gösterilmektedir. En kapsayıcı küme Elektronik’in başlangıç ve bitiş değerleri (sol_deger ve sağ_deger) en kapsayıcı şekilde verilmiştir. Buradan Elektronik’in alt kırılımlarına ulaşmak için sol değerinden büyük ve sağ değerinden küçük aralıkta arama yapacağız. Bunu bu yapı olmadan yapmak istediğimizde en alt kırılıma kadar join ile bağlamamız gerekliydi. Şimdi bu işlemi örneğimizde kullanacağımız Kategori tablosu üzerinde inceleyelim.

nested

Burada en alt kategoriye inmeye çalışalım. Mesela Hp Laptop ürününe kadar inmeye çalışalım.

İnmek istediğimiz zaman bu şekilde joinler ile tablomuzu parenta göre bağlamamız gerekmekteydi.

Bunun dışında;

  • Bir kategorinin alt kırılımı var mı ?
  • Seviyesi
  • Alt kırılım sayısı vs.

gibi işlemlerde sormuzu genişletmemiz gerekmekteydi. Şimdi bu işlem nested set model üzerinde nasıl yapılıyor ona bakalım.

nested_kategori
nested_kategori

 

Burada bir nested set örneği hazırladım. Bu tablonun nasıl yapıldığının kodlarını paylaşacağım yazı sonunda.

Bu tablo sayesinde yukarıda yazdığımız sorgulamaların hepsini kolay bir şekilde yapabileceğiz.

Mesela Elektronik kategorisine ait alt kategorilerin listesini, alt kırılım sayısını ve seviyesini kolay bir şekilde öğrenmiş olduk. Bu tabloyu şu şekilde oluşturabiliriz.

 

Nested Şema
Nested Şema

 

Nested şemasındaki ağaç yapısında sağ ve sol değerler bu şekilde oluşmaktadırlar. Yukarıdaki kod içerisinde bunu koda dökmeye çalıştım.

Nested yapısında eğer alt kriter yok ise sağ değer sol değerin bir fazlası olacak. Değerler bir bir artarak ağaç yapısı şekillenecek. Kod içerisinde de bu algoritmaya göre kodları yazdım. Bunu sql tarafında yapıp kategori tablosuna trigger olarak bağladığımız ve create update delete işleminde bu tetiklenerek güncel tablo şemasını oluşturabiliriz. Ben bunu c# tarafında yapmayı tercih ettim bu konuda kendimi daha iyi gördüğüm için.

Hepinize kolay gelsin İyi çalışmalar

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir