7 Mayıs 2013 Salı

Slowly Changing Dimension (SCD) Nedir?


OLTP sistemlerde SCD yapılarından bazılarını kullanırız fakat böyle bir modellemenin farkındalığına varmamış olabiliriz.Fakat veri ambarında modelleme yaparken SCD yapısını özümsemek ve verilerimizi bu yapıya göre saklamak gerekir.
Bu kavram bir datayı update ederken eskisine ihtiyaç olup olmadığı ,eğer ihtiyaç ise mevcut sistemde nasıl bir yol izleyerek eski datayı saklamamız gerektiği konusunda bize yol gösterir.
UPDATE işleminde karşımıza çıkan durumu aşağıdaki 3 yapıdan birini uygulayarak işlemi gerçekleştirebiliriz.

SCD yapısı 3 tipten oluşur.
1)       Var olan kayıtın üzerine yazmak
2)      Update edilen kayıt için yeni bir kayıt eklemek,eskisini tutma
3)      İlgili tabloya yeni bir alan ekleyerek güncellenen datanın eski halini tutmak.
Bir örnek üzerinden olayı somutlaştırmakta fayda görüyorum.
Farzedelim bir müşterimizin medeni durumu veya ikamet yeri değiştiğini göz önüne alalım.SCD tiplerinde nasıl işleme alırdık.Müşterinin ilk durumu aşağıdaki gibidir.
Medeni durumu bekar olduğundan yola çıkalım.Evlendiği zaman
1)      Var olan datayı günceller son durumu Evli olarak tutulur.
2)     Var olan kayıta geçerlilik Başlangıç Tarihi ve Bitiş Tarihi olacak şekilde iki alan eklenir.(SDATE,EDATE).Mevcut kayıtın başlangıç tarihini kayıtın ilk eklendiği tarih,bitiş tarihine de alanın update tarihi yazılır.Ve yeni bir kayıt eklenerek sdate alanına update tarihi yazılır ve ilgili alan(medeni durumu) güncellenir.
Böylece bu tarihten itibaren bu kayıtın geçerli olduğu anlaşılır.
veya sigorta şirketlerinin kullandığı zeyl mantığı ile güncel olan max(zeyl_no) olandır
3)      Var olan kayıta yeni bir alan eklenir.Böylece önceki medeni hali o alana yazılır.
Yukarıdaki örneklere baktığımızda herbirinin kullanıldığı yerler vardır.Doğru yerde doğru SCD tiplerini kullanmak hem performansı arttırır hem de kayıtın geçmiş haline erişebilme imkanını bulunur.
Aşağdaki durumlarda seçebileceğimiz TYPE lar şu şekildedir.
  • Eğer siparişlerin tutulduğu bir tablonuz var ise bunun için TYPE 1 tutabilirsiniz.Burada işlemin son hali önenmlidir.
  • Eğer veri ambarı sistemini kullanıyorsanız geçmişe dönük raporlama yapacaksanız TYPE 2 tercih edilmeli.
  • Eğer migration yaptı iseniz vemüşterinin eski sistemdeki müşteri numarası gibi alanları tutmak istiyorsanız TYPE 3 tercih edilebilir.