Normalizasyon Nedir?

Yasemin Cüni
Turuncu Internet Solutions
4 min readJan 7, 2020

Merhabalar,

Bugün sizlere başarılı bir veritabanı tasarımının bir parçası olan normalizasyon kavramından bahsedeceğim. Normalisazyon nedir? Normalizasyon olmadan ne gibi problemlerle karşılaşırız? Normalizasyon bu problemleri nasıl çözer? gibi sorulara cevap arayacağız.

Haydi başlayalım :)

Normalizasyon nedir?

Normalizasyon, veritabanlarındaki tabloların içeriğini organize etme tekniğidir. Başarılı veritabanı tasarımının bir parçasıdır. Normalizasyon olmadan, veritabanı sistemleri; yanlış, yavaş ve verimsiz olabilir ve beklediğiniz verileri üretmeyebilir.

Bir veri tabanının, veri tekrarını en aza indirgemek ve her tabloda yalnızca ilgili verilerin depolandığından emin olmak için normalleştirilmesi önemlidir. Bir tablo belirli bir konu hakkında olmalı ve sadece destekleyici konular içermelir. Örneğin, satış görevlileri ve müşteriler hakkında bilgi içeren bir tablo çeşitli amaçlara hizmet eder:

· Kuruluşunuzdaki satış görevlilerini belirleyin

· Ürün satmak için şirketinizin aradığı tüm müşterileri listeleyin

· Belirli müşterilere hangi satış personelinin çağrılacağını belirleyin

Bir tabloyu bir amaç ile sınırlandırarak, veritabanınızdaki yinelenen veri sayısını azaltırsınız. Bu, veritabanı modifikasyonlarından kaynaklanan bazı sorunları ortadan kaldırır. Bu hedeflere ulaşmak için bazı yerleşik kurallar kullanılır. Bu kuralları uygularken yeni tablolar oluşturulur.

Çoğu veritabanının kullanmaya bağlı olduğu üç normal form vardır. Tablolar, birbirini izleyen her veritabanı normalleştirme formunu karşıladıkça, veritabanı modifikasyon sorunlarına daha az eğilimli olurlar ve tek bir amaca veya konuya daha fazla odaklanırlar.

Veritabanı Normalleştirmenin Nedenleri

Bir veritabanını normalleştirmenin üç ana nedeni vardır. Birincisi yinelenen verileri en aza indirmek, ikincisi veri modifikasyon sorunlarını en aza indirmek veya önlemek ve üçüncüsü sorguları basitleştirmek.

Şimdi, normalleştirilmemiş bazı verilere bakalım ve çıkabilecek bazı sorunları tartışalım.

Aşağıdaki tabloyu bir düşünelim;

SalesStaff Table

Dikkat edilmesi gereken ilk şey, bu tablo aşağıdakiler dahil olmak üzere birçok amaca hizmet eder:

1. Kuruluşun satış elemanlarını belirleme

2. Satış ofislerini ve telefon numaralarını listeleme

3. Bir satış görevlisini bir satış ofisi ile ilişkilendirme

4. Her satış elemanının müşterilerini gösterme

Burada durup bir düşünelim. Genel olarak bir amacı olan tabloları görmek istiyorum. Tablonun birçok amaca hizmet etmesi birçok zorluğu beraberinde getirir; yani veri tekrarı, veri modifikasyon sorunları ve verileri sorgulamak için artan çaba…

Unutma; veri tabanı mantığının en önemli ilkelerinden biri şöyle der:

Her nesne tipi için ayrı bir tablo yarat!

Veri Tekrarı ve Modifikasyon Sorunları

Her SalesPerson için hem SalesOffice’i hem de OfficeNumber’ı listelediğimize dikkat edin. Yinelenen sales person verileri var. Yinelenen bilgiler iki sorun oluşturur:

1. Depolamayı artırır ve performansı azaltır.

2. Veri değişikliklerini sürdürmek zorlaşır.

Örneğin:

İstanbul ofisini Antalya ya taşıdığımızı düşünün. Bunu tablomuza düzgün bir şekilde yansıtmak için şu anda İstanbul’da bulunan tüm SalesPerson girişlerini güncellememiz gerekiyor. Tablomuz küçük bir örnektir, ancak bunun yüzlerce güncellemeyi içerebileceğini görebilirsiniz.

Insert Sorunu

Örneğimizde, SalesPerson eklemeden yeni bir SalesOffice kaydedemiyoruz. Neden? Çünkü kaydı oluşturmak için primary key sağlamamız gerekiyor. Yani EmployeeID eklemeden SalesOffice ekleyemiyoruz.

Update Sorunu

Bu durumda, birkaç satırda aynı bilgilere sahibiz. Örneğin, OfficeNumber değişirse, yapılması gereken birden fazla güncelleme vardır. Tüm satırları güncellemezsek tutarsızlıklar olur ve veri bütünlüğü sağlanmamış olur.

Delete Sorunu

Bir satırın silinmesi, birden fazla olgu kümesinin kaldırılmasına neden olur. Örneğin, Boyce Evenue emekliye ayrılırsa, o satırı silmek Izmir ofisi hakkında bilgi kaybetmemize neden olur.

Arama ve Sıralama Sorunları

SalesStaff tablosunda, Ford gibi belirli bir müşteriyi aramak istiyorsanız, aşağıdaki gibi bir sorgu yazmanız gerekir:

Açıkçası, müşteri bir şekilde bir sütunda olsaydı, sorgumuz daha basit olurdu. Ayrıca, müşteriye göre sıralamak istediğinizi düşünün…

Verileri farklı tablolara ayırarak bu sorunları ortadan kaldırabilir veya azaltabilirsiniz. Bu, verileri tek bir amaca hizmet eden tablolara yerleştirir.

Tabloyu yeniden tasarlama işlemi veritabanı normalleştirmedir. Normalleştirme kurallarından bahsetmeyeceğim. Zaten mantığını anladıktan sonra bu kurallara takılmayıp, veritabanı tasarımlarınızı kuralları düşünmeden sezgisel olarak tasarlayabileceksiniz.

Şimdi…

Normalizasyon kavramının veritabanı tasarımı için önemini görmüş olduk. Umarım faydalı olmuştur.

--

--