Normalizasyon kavramı nedir? Neden yapılır? Yapılmazsa ne gibi sorunlar oluşur?
comments
1 references
// Comments are closed.
Normalizasyon kavramı nedir? Neden yapılır? Yapılmazsa ne gibi sorunlar oluşur?
// Comments are closed.
Bu konunun açıklaması bayağı uzatılabilir. Ben çok basit bir örnek üzerinden anlatacağım. Detayları için daha dar alanda sorular sormak mantıklı olacaktır.
Bir uygulama içinde bakkal defteri tutacağımızı düşünelim. Bu defterde alacak ve verecekler olacak. Yani basit bir muhasebe işlemi yapılacak diye düşünelim. Defterimizi nasıl tutardık.
Kişi – Alacak
kenan – 100
kenan – 150
kenan – 50
tolga – 100
ahmet – 75
tolga – 55
ahmet – 80
kenan – 30
….
….
Bu şekilde tutmaya devam edelim ve mahallemizde sevilen bir bakkal olalım. Bu satırlar gittikçe uzar. Peki kenan geldi ve benim borcumu hesapla dedi nasıl yapacağız. Tek tek satırlara bakıp kenan olan kayıtları bulacağız, onların toplamını alacağız. Tebrikler normalizasyon 1. aşama olarak bir veri tabanı tasarladık. Peki bu kayıt uzadıkça uzuyor ve sürekli olarak kullanıyoruz. Bu hesaplama işlemlerini daha kolay nasıl yapabiliriz? Defterin her bir sayfasına başka birisinin adını yazarak o sayfada sadece o vatandaşın bilgilerini tutabiliriz, değil mi ?
Sayfa -1
kenan
100,25,50,54,78,34
Sayfa -2
Ahmet
122,142,123,54,323,23
Sayfa -3
Tolga
12,12,432,43,23,4,5,5,65,3,4
Şimdi birisi geldiği zaman benim borcumu hesapla dediğinde ne yapacağız? O vatandaşın sayfasını açıp toplayacağız. Bu şekilde nelerden kazanımımız oldu?
– Her seferinde vatandaşın ismini yazıp yazıp boşuna defteri tüketmemiş olduk. (Defterde mantıksız olabilir 🙂 fakat milyonlarca kayıtlık veri tabanlarında anlamı var)
– Bir kişilik kayıt için gidip de bütün defteri aramadık, zamandan tasarruf (İlişkisel veri tabanlarında yapılan işlem açısından yine bütün kayıtları aramak zorunda kalıyoruz. Index kullanımlarından dolayı hızlı ve kolay oluyor…)
Tekrar tebrikler! Veri tekrarlanması (Redundancy) sorununu hallettik, yavaştan 2. seviye normalizasyona geçtik.
Peki bu kayıtları veri tabanında nasıl yapacağız (ilişkisel veri tabanları için)?
Tablo bir – işlemler
Tablo iki – müşteriler
Müşteri tablosu
1 – kenan
2 – Tolga
3 – Ahmet
…..
İşlemler tablosu
Müşteri, Meblağ
1 – 50
1 – 150
2 – 324
4 – 230
…..
Buradan gördüğümüz üzere aynı kayıtların büyüklüklerini azaltarak iş yapar duruma geldik. Normalizasyonun en büyük ve temel özelliği veri tekrarlarını (redundancy) azaltarak boşuna yer kaplama sorunlarını halletmek. Milyonlarca kayıt olan tablolarda bu işlem bizim için hayati önem kazanmakta şöyle ki:
Müşteri
Ad/Soyad/Telefon/Adres/…..
Bu tarz bir müşteri bilgisi tutuyorsanız ve işlem ile müşteri bilgilerini birbirinden ayırmadıysanız önünüze şöyle bir tablo çıkıyor
İşlemler
Ad/soyad/telefon/adres/../işlem meblağı/işlem tarihi/işlem/ürün 1
Ad/soyad/telefon/adres/../işlem meblağı/işlem tarihi/işlem/ürün 2
Ad/soyad/telefon/adres/../işlem meblağı/işlem tarihi/işlem/ürün 3
Ad/soyad/telefon/adres/../işlem meblağı/işlem tarihi/işlem/ürün 4
Bu şekilde bir tablo yapısında takdir edebiliriz ki her bir ürün kaydı için müşterinin ad/soyad ve diğer bilgilerine ihtiyacımız yoktur. Bu açıdan bakarsak parçalanarak farklı tablolarda tutulması bizim için mantılı olacaktır.
Normalizasyonun aşamalarına bakarsanız ne kadar parçalara ayırabileceğiniz konusunda fikirler verir. Günlük hayatta ise 3. seviye normalizasyon temel düzeyde veri tabanlarına yeterli oluyor. Veri tabanındaki kayıtların karmaşıklığı ve miktarı arttıkça daha fazla çalışma yapılarak daha üst seviyelere çıkılabilir.
İyi çalışmalar.