Veritabanlarında normalizasyon sistemin ileriye dönük kullanımında oluşabilecek güncelleme ve yeniliklerde hasar görmeden uyum sağlamasına yarayan ve veri analizi yaparken çok fazla varyasyon çıkartabilmenize yarar.
Çok uzatmadan Normalize Kurallar ile Örnek bir Restoran veritabanı yapalım.
musteriler
-musteri_no (Integer(11) ve Unique Auto Increment olmak zorundadır -ki müşterimizi id'sinden bulalım.)
-isim (varchar-255 uygundur)
-soyisim(varchar-255 uygundur)
-created_at (datetime uygundur default= current date time)
-updated_at (datetime uygundur default= current date time)
musteri_adresleri
-adres_no (Integer(11) ve Unique Auto Increment olmak zorundadır)
-musteri_no (integer(11) = musteriler.musteri_no)
-adres (text - nullable)
-ilce (text)
-sehir (text)
-telefon (text - nullable)
-eposta (text - nullable)
-created_at (datetime uygundur default= current date time)
-updated_at (datetime uygundur default= current date time)
siparisler
-siparis_no (integer(11) ve Unique Auto Increment)
-musteri_no (integer(11) = musteriler.musteri_no)
-musteri_isim ( NEDEN BİR DAHA YAZIYORUZ? Çünkü müşteri bir dönem sonra bu ismi değiştirebilir 2012 tarihinde ismi Ahmetmiş sonra Ayşe olarak güncellemiş bunu musteri_no statik olduğu için oradan bulabiliriz. )
-musteri_soyisim (varchar-255)
-musteri_adres_no (integer(11) = musteri_adresleri.adres_no)
-musteri_adres_adres
-musteri_adres_ilce
-musteri_adres_sehir
-musteri_telefon
-musteri_eposta
-siparis_durumu (enum = İptal,Teslim Edildi vs..)
-created_at (datetime uygundur default= current date time)
-updated_at (datetime uygundur default= current date time)
siparisler_urunler
-siparis_no
-urun_no (integer(11) = urunler.urun_no)
-urun_adi (text)
-urun_fiyat (decimal,10,2 - default: 0.00)
-urun_siparis_adeti ( integer(11) - default:0 )
-created_at (datetime uygundur default= current date time)
-updated_at (datetime uygundur default= current date time)
Sipariş ürünlerini JOIN ile bağlanarak urun_fiyat * urun_siparis_adeti ile bulmak normailzedir. siparis_toplam değeri tutmak (adet * fiyat) normalize değerlerine aykırıdır.
urunler
-urun_no (integer(11) ve unique Auto Increment)
-isim (text)
-fiyat (decimal, 10,2 - Fiyat bazını 0.00 olarak yordamladık 10,6 yaparsanız fiyat: 0.000000 olarak yorumlanabilir.)
-created_at (datetime uygundur default= current date time)
-updated_at (datetime uygundur default= current date time)
Bu şekilde bir veri tabanı ile normalize standartta bir sistem çıkartabilirsiniz. PHP ile DB build eden arkadaşlarıma bu işi çok kolaylaştıracak olan Eloquent tavsiye etmekteyim.
--Konu hakkında daha detaylı açıklama ekleyeceğim yakında.