Normalizasyon nedir? (Örnekli Anlatım)

Elif Şirin
3 min readJun 10, 2021

Merhabaa arkadaşlar bugün burada çook önemli bir konuyu derinlemesine beraber incelemek istiyorum.

Veri tabanı işlemleri, her uygulamada karşımıza çıkar. Peki biz veri tabanı için yarattığımız tabloları nasıl efektif bir şekilde tasarlayabiliriz.

Veri tekrarı olan veri tabanlarında, veri anomalisiyle karşılaşırız. Bu durumda CRUD işlemleri bize sürekli sorunlar çıkarır. İyi tasarlanmış bir veri tabanı, bu işlemleri sorunsuz bir şekilde halletmemizi sağlar. CRUD yani Oluşturma (Create), Okuma (Read), Güncelleme (Update), Silme (Delete) yani veri oluşturmak, veri okumak, veri güncellemek, veri silmek demektir. Bu sebeple tablolarımızı kafamıza göre tasarlamamalıyız. Bu işi normalizasyon kurallarını takip ederek adım adım tasarlamalıyız. Normalizyon bize avantajları nedir?

  1. Veri tekrarını engeller ve tablolar arasında daha tutarlı bir çalışma sağlar.
  2. Saklanan verilerimiz daha anlaşılır hale gelir.
  3. Veri tabanı sorgularımızın hızlı bir şekilde çekilmesi sağlar.
  4. Verimli bir veri yapısı sunar.

Normalizasyon seviyeleri 1NF (Birinci Normal Form, 2NF (İkinci Normal Form), 3NF (Üçüncü Normal Form), 3.5NF / BCNF (Boyce-Code Normal Form), 4NF ( Dördüncü Normal Form) … bu şekilde yukarılara doğru gider ancak 4NF’de hatta 3.5NF/BCNF’den sonraki normalizasyon seviyeleri çok nadir kullanılır.

Hadi gelin bir veri tabanı örneğiyle anlamaya çalışalım.

Örneğimiz bir entrüman satış veritabanı olsun diyelim.

İlk önce bu örnek için olan strong entitylerimizi (güçlü varlıklarımızı) belirlermek istiyorum. Yani bu veri tabanında olmazsa olmaz varlıklarımız nelerdir. Bunları kısaca bir excell tablosunda yazmak istiyorum.

Şimdilik tablolarımızı Normalizasyon bilmeyen bir kişi olarak oluşturdum ve aşağıdaki gibi doldurdum.

Normlizasyon UYGULANMADAN Önceki Tablolarımız

Hadi gelin bu tablomuza sırasıyla Normalizasyon basamaklarını uygulayarak gidelim.

1NF (1. Normal Form)

Veri tabanımızın 1NF olabilmesi için aşağıdaki gereksinimleri karşılaması gerekir :

  • Aynı tablo içinde tekrarlayan kolonlar bulunamaz.
  • Her kolonda yalnızca bir değer bulunabilir.

Örneğimizdeki sorunlu yerlerin arka planını kırmızı yapmıştım. Görüldüğü gibi 1'den çok giriş olan yerlerimizi yeniden kuralımıza göre revize ederek aşağıda tekrar yazdım.

1NF’ye göre ayarlanmız tablolarımız:

1 NF Uygulandıktan Sonraki Tablolarımız

Sizce de hala gariplikler yok mu tablolarımızda? Hadi gelin öbür aşamaya geçelim!

2 NF (2. Normal Form)

Veri tabanımızın 2NF olabilmesi için aşağıdaki gereksinimleri karşılaması gerekir :

  • 1 NF’ye uygun bir veri tabanımız olmalıdır.
  • Her satır eşsiz (unique) bir anahtarla tanımlanmalıdır. (Primary/Unique Key)
  • Herhangi bir veri alt kümesinde birden çok satırda tekrarlanmamalıdır.
  • Ana tablo ile yeni tablolar arasındaki ilişki Dış Anahtarlar (Foreign Key) kullanılarak ilişkilendirilmelidir.
2 NF Uygulandığımız Tablolarımızın Görüntüsü

3 NF (3. Normal Form)

Veri tabanımızın 3NF olabilmesi için aşağıdaki gereksinimleri karşılaması gerekir :

  • 2NF’ye uygun bir veri tabanımız olmalıdır.
  • Anahtar sahibi olmayan hiç bir kolon bir diğerine (anahtar olmayan başka bir kolona) bağıl olmamalı ya da geçişken fonksiyonel bir bağımlılığı (transitional functional dependency) olmamalıdır. Başka bir deyişle her kolon eşsiz anahtara tam bağımlı olmak zorundadır.
3 NF Uygulandığımız Tablolarımızın Görüntüsü

BCNF/3.5NF (Boyce-Codd Normal Form)

Veri tabanımızın BCNF/3.5NF (Boyce-Codd Normal Form) olabilmesi için aşağıdaki gereksinimleri karşılaması gerekir :

  • 3NF’ye uygun bir veri tabanımız olmalıdır.
  • Her determinant (belirleyici kolon) aynı zamanda bir aday anahtar olmalıdır.

Determinant: Aynı satırdaki diğer kolon değerlerini belirlemek için kullanılan kolon kümesi determinant olarak adlandırılır.

Veri tabanımız bu kuralları karşılıyor.

4 NF (4. Normal Form)

Veri tabanımızın BCNF/3.5NF (Boyce-Codd Normal Form) olabilmesi için aşağıdaki gereksinimleri karşılaması gerekir :

  • 3NF’ye uygun bir veri tabanımız olmalıdır.
  • Çok-değerli bağımlılıkları (Multli-Valued dependency) olmamalıdır.

Multi-Valued Dependency: Bu durum bir ya da daha çok veri satırının var olması, aynı tabloda başka bir (ya da daha çok) veri satırının bulunmasını gerektirdiğinde ortaya çıkar.

Her Multi-Valued (Çok Değerli) veri yenı bir tablo oluşturur.

Veri tabanımız da Multi-Valued (Çok Değerli) veri içeren bir tablomuz bulunmamaktadır.

Son olarak, SQL Server Management Studio (SSMS) kullanarak çizdiğim örneğimize ait olan Database Diagramı paylaşmak istiyorum.

Tablolarımızın Database Diagramı

Bir yazımızın daha sonuna geldik! Herkese sağlıklı günler diliyorumm :)

--

--