Veritabanı normalizasyonu, veri tekrarını azaltmak, veri bütünlüğünü korumak ve veritabanı performansını artırmak amacıyla veritabanı tablolarını düzenleme işlemidir. İyi tasarlanmış bir veritabanı, uygulamanızın veya sisteminizin verimli çalışması için kritik öneme sahiptir. Bu makalede, veritabanı normalizasyonunun ne olduğunu, neden önemli olduğunu, normal formlarını ve nasıl uygulanacağını detaylı bir şekilde inceleyeceğiz.
Veritabanı normalizasyonu, verileri mantıksal ve tutarlı bir şekilde düzenleyerek veri tekrarını en aza indirme ve veri bağımlılıklarını ortadan kaldırma sürecidir. Amaç, verileri küçük, iyi tanımlanmış tablolara ayırarak ve tablolar arasındaki ilişkileri tanımlayarak veri tutarlılığını sağlamaktır. Bu süreç, veritabanının daha verimli çalışmasına, daha az depolama alanı kullanmasına ve veri manipülasyon işlemlerinin daha hızlı gerçekleştirilmesine yardımcı olur.
Normalizasyonun birçok avantajı vardır:
Normalizasyon, farklı "normal formlar" aracılığıyla gerçekleştirilir. Her bir normal form, bir önceki forma göre daha katı kurallar içerir. En yaygın kullanılan normal formlar şunlardır:
Bir tablonun 1NF'de olması için aşağıdaki koşulları sağlaması gerekir:
Örnek:
Aşağıdaki tablo 1NF'de değildir çünkü "Telefon Numaraları" sütununda birden fazla değer bulunmaktadır:
Müşteri ID | Adı | Soyadı | Telefon Numaraları- -- -- -- -- -|- -- --|- -- -- -- -|- -- -- -- -- -- -- -- -- -- -1 | Ayşe| Yılmaz | 555-1234, 555-56782 | Mehmet| Demir | 555-9012
1NF'e dönüştürülmüş hali:
Müşteri ID | Adı | Soyadı | Telefon Numarası- -- -- -- -- -|- -- --|- -- -- -- -|- -- -- -- -- -- -- -- -- -- -1 | Ayşe| Yılmaz | 555-12341 | Ayşe| Yılmaz | 555-56782 | Mehmet| Demir | 555-9012
Bir tablonun 2NF'de olması için aşağıdaki koşulları sağlaması gerekir:
Örnek:
Aşağıdaki tablo 2NF'de değildir çünkü "Ürün Adı" sadece "Ürün ID"ye bağımlıdır, "Sipariş Tarihi" ise bileşik anahtarın ("Sipariş ID", "Ürün ID") tamamına bağımlıdır:
Sipariş ID | Ürün ID | Ürün Adı | Sipariş Tarihi | Miktar- -- -- -- -- -|- -- -- -- --|- -- -- -- -- -|- -- -- -- -- -- -- --|- -- -- -- -1 | 101 | Klavye | 2023-10-26 | 21 | 102 | Mouse | 2023-10-26 | 12 | 101 | Klavye | 2023-10-27 | 3
2NF'e dönüştürülmüş hali:
Ürünler Tablosu:
Ürün ID | Ürün Adı- -- -- -- -- -|- -- -- -- -- -101 | Klavye102 | Mouse
Sipariş Detayları Tablosu:
Sipariş ID | Ürün ID | Sipariş Tarihi | Miktar- -- -- -- -- -|- -- -- -- --|- -- -- -- -- -- -- --|- -- -- -- -1 | 101 | 2023-10-26 | 21 | 102 | 2023-10-26 | 12 | 101 | 2023-10-27 | 3
Bir tablonun 3NF'de olması için aşağıdaki koşulları sağlaması gerekir:
Örnek:
Aşağıdaki tablo 3NF'de değildir çünkü "Şehir" sütunu "Posta Kodu"na bağımlıdır ve "Posta Kodu" da "Müşteri ID"ye bağımlıdır (transit bağımlılık):
Müşteri ID | Adı | Soyadı | Posta Kodu | Şehir- -- -- -- -- -|- -- --|- -- -- -- -|- -- -- -- -- -- -|- -- -- --1 | Ayşe| Yılmaz | 34000 | İstanbul2 | Mehmet| Demir | 06000 | Ankara
3NF'e dönüştürülmüş hali:
Müşteriler Tablosu:
Müşteri ID | Adı | Soyadı | Posta Kodu- -- -- -- -- -|- -- --|- -- -- -- -|- -- -- -- -- -- -1 | Ayşe| Yılmaz | 340002 | Mehmet| Demir | 06000
Posta Kodları Tablosu:
Posta Kodu | Şehir- -- -- -- -- -|- -- -- --34000 | İstanbul06000 | Ankara
Daha ileri normal formlar (Boyce-Codd Normal Form (BCNF), 4. Normal Form (4NF), 5. Normal Form (5NF)) daha karmaşık veri bağımlılıklarını ele alır ve nadiren pratik uygulamalarda kullanılır. Genellikle, 3NF'ye ulaşmak çoğu veritabanı için yeterlidir.
Normalizasyonun bazı dezavantajları da vardır:
Bu dezavantajları azaltmak için, bazen "denormalizasyon" adı verilen bir teknik kullanılır. Denormalizasyon, performansı artırmak amacıyla bazı veri tekrarının kasıtlı olarak eklendiği bir süreçtir. Ancak, denormalizasyonun veri bütünlüğünü tehlikeye atabileceği unutulmamalıdır.
Veritabanı normalizasyonunu uygulamak için aşağıdaki adımları izleyebilirsiniz:
Veritabanı normalizasyonu, veri bütünlüğünü korumak, veri tekrarını azaltmak ve veritabanı performansını artırmak için önemli bir tekniktir. Normalizasyon sürecini anlamak ve doğru bir şekilde uygulamak, veritabanı tasarımının başarısı için kritik öneme sahiptir. Her ne kadar normalizasyonun bazı dezavantajları olsa da, iyi tasarlanmış bir veritabanı, uygulamanızın veya sisteminizin verimli ve güvenilir bir şekilde çalışmasını sağlar.