- Katılım
- 7 Nis 2025
- Konular
- 367
- Mesajlar
- 780
- Çözümler
- 1
- Tepkime puanı
- 121
- Puan
- 93
- Konum
- İstanbul
- Web sitesi
- forumagel.com
Bölüm 4: Veritabanı Tasarımının Temelleri ve Normalizasyon
İyi bir veritabanı tasarımı, uygulamanızın performansını, veri bütünlüğünü ve bakım kolaylığını doğrudan etkiler. Kötü tasarlanmış bir veritabanı, veri tekrarına, tutarsızlıklara ve zamanla performansı düşüren sorunlara yol açabilir. Veritabanı tasarımında temel amaç, veriyi mantıksal ve düzenli bir şekilde depolamak, gereksiz tekrarı en aza indirmek ve veri bütünlüğünü sağlamaktır. Bu amaçla kullanılan temel yöntemlerden biri Normalizasyon'dur.
Normalizasyon Nedir?
Normalizasyon, ilişkisel veritabanı tasarımında kullanılan, veritabanı yapısını gereksiz veri tekrarını (redundancy) azaltmak ve veri bağımlılıklarını mantıksal bir düzene sokmak amacıyla belirli kurallara göre düzenleme işlemidir. Normalizasyon, veritabanını daha esnek, sürdürülebilir ve hataya açık olmayan bir yapıya kavuşturmayı hedefler. Bu süreçte farklı Normal Formlar (Normal Forms - NF) tanımlanmıştır. En yaygın olanları 1. Normal Form (1NF), 2. Normal Form (2NF) ve 3. Normal Form (3NF)'dur.
1. Normal Form (1NF)
Bir tablo 1. Normal Formdadır eğer:
- Her hücrede sadece bir değer bulunur (atomik değerler).
- Her sütunun belirli bir veri türü vardır.
- Her satır benzersizdir (genellikle bir
PRIMARY KEY
ile sağlanır).
Örnek (1NF'e Uygun Değil):
SiparisID | Urunler | MusteriAdi |
---|---|---|
101 | ÜrünA, ÜrünB | Ahmet |
102 | ÜrünC | Ayşe |
Bu tablo 1NF'e uygun değildir çünkü "Urunler" sütununda birden fazla değer içerebilen bir liste bulunmaktadır.
Örnek (1NF'e Uygun):
SiparisDetayID | SiparisID | UrunAd | MusteriAdi |
---|---|---|---|
1 | 101 | ÜrünA | Ahmet |
2 | 101 | ÜrünB | Ahmet |
3 | 102 | ÜrünC | Ayşe |
2. Normal Form (2NF)
Bir tablo 2. Normal Formdadır eğer:
- Normal Formdadır.
- Birincil anahtarın (Primary Key) tam olmayan bağımlılık içermeyen tüm anahtar olmayan (non-key) sütunlara sahiptir. Yani, anahtar olmayan hiçbir sütun, birleşik birincil anahtarın yalnızca bir kısmına bağlı olmamalıdır.
SiparisDetayID (PK) | SiparisID | UrunID | UrunAd | UrunFiyat | Miktar |
---|---|---|---|---|---|
1 | 101 | A1 | ÜrünA | 10 | 2 |
2 | 101 | B2 | ÜrünB | 20 | 1 |
Burada SiparisDetayID birincil anahtar olabilir. Ancak, UrunAd ve UrunFiyat sütunları sadece UrunID'ye bağlıdır, birincil anahtarın tamamına (SiparisDetayID) değil. Bu durum, aynı ürün bilgilerinin farklı sipariş detaylarında tekrarlanmasına yol açar.
Örnek (2NF'e Uygun - Tabloları Ayırma):
SiparisDetayları Tablosu:
SiparisDetayID (PK) | SiparisID | UrunID | Miktar |
---|---|---|---|
1 | 101 | A1 | 2 |
2 | 101 | B2 | 1 |
Urunler Tablosu:
UrunID (PK) | UrunAd | UrunFiyat |
---|---|---|
A1 | ÜrünA | 10 |
B2 | ÜrünB | 20 |
Bu tasarımda UrunAd ve UrunFiyat, yalnızca UrunID'ye bağlı oldukları ayrı bir tabloya taşınmıştır.
3. Normal Form (3NF)
Bir tablo 3. Normal Formdadır eğer:
- Normal Formdadır.
- Anahtar olmayan hiçbir sütun, başka bir anahtar olmayan sütuna geçişli bağımlılık (transitive dependency) içermez. Yani, anahtar olmayan bir sütun, birincil anahtar dışındaki başka bir sütuna bağlı olmamalıdır.
MusteriID (PK) | MusteriAd | Sehir | SehirKodu |
---|---|---|---|
1 | Ahmet | Ankara | 06 |
2 | Ayşe | İstanbul | 34 |
Burada SehirKodu sütunu, MusteriID'ye doğrudan bağlı değildir; Sehir sütununa bağlıdır. Bu bir geçişli bağımlılıktır (
MusteriID -> Sehir -> SehirKodu
). Bu durum, aynı şehir kodu bilgisinin birden fazla müşteri için tekrarlanmasına yol açar.Örnek (3NF'e Uygun - Tabloları Ayırma):
Musteriler Tablosu:
MusteriID (PK) | MusteriAd | Sehir |
---|---|---|
1 | Ahmet | Ankara |
2 | Ayşe | İstanbul |
Sehirler Tablosu:
Sehir (PK) | SehirKodu |
---|---|
Ankara | 06 |
İstanbul | 34 |
Bu tasarımda SehirKodu, Sehir'e doğrudan bağlı olduğu ayrı bir tabloya taşınmıştır.
Genel olarak, veritabanlarını en az 3NF'e kadar normalleştirmek iyi bir uygulama olarak kabul edilir. Daha yüksek normal formlar (BCNF, 4NF vb.) da vardır ve özel durumlarda gerekli olabilir.
İndeksleme (Indexing)
İyi bir tasarımın yanı sıra, veritabanı performansını artırmak için indeksleme kullanılır. İndeksler, kitapların arkasındaki fihristlere benzer. Belirli sütunlara indeks eklemek, veritabanı sisteminin sorguları çok daha hızlı çalıştırmasını sağlar, çünkü tüm tabloyu taramak yerine doğrudan ilgili verilere ulaşabilir. Ancak indeksler disk alanı kaplar ve veri ekleme/güncelleme işlemlerini yavaşlatabilir, bu yüzden dikkatli kullanılmalıdır. Genellikle sık sorgulanan sütunlara ve
JOIN
işlemlerinde kullanılan sütunlara indeks eklenir.Veritabanı tasarımı ve normalizasyon, sadece veri tekrarını azaltmakla kalmaz, aynı zamanda veri bütünlüğünü korumaya yardımcı olur. Çünkü bir veri sadece bir yerde saklandığında, güncelleme veya silme işlemlerinde tutarsızlık oluşma riski azalır.
Bu bölümde veritabanı tasarımının temel ilkelerine ve normalizasyona odaklandık. Sağlam bir veritabanı altyapısı oluşturmak için bu prensipleri anlamak çok önemlidir.
Bir sonraki bölümde, veritabanı kullanımında sık karşılaşılan hataları, bu hataların nedenlerini ve nasıl çözülebileceğini ele alarak pratik sorun giderme yöntemlerine değineceğiz.