Foruma hoş geldin 👋, Ziyaretçi

Merhaba Değerli Ziyaretçimiz, ForumaGel ailesi seni bekliyor! 🌟 Aramıza katılarak güçlü ve samimi topluluğumuzun bir parçası olabilirsin. Burada her üye değerli, her katkı kıymetli. Şimdi üye ol, bizimle birlikte gelişmenin ve keyifli sohbetlerin tadını çıkar! Sevgi ve Saygılarla, ForumaGel Yönetimi ❤️

SignUp Now!
  • Merhaba Değerli Ziyaretçimiz, ForumaGel ailesi seni bekliyor! 🌟 Aramıza katılarak güçlü ve samimi topluluğumuzun bir parçası olabilirsin. Burada her üye değerli, her katkı kıymetli. Şimdi üye ol, bizimle birlikte gelişmenin ve keyifli sohbetlerin tadını çıkar! Sevgi ve Saygılarla, ForumaGel Yönetimi ❤️
Yan Yana Banner

Veritabanı Tasarımının Temelleri ve Normalizasyon (1 Görüntüleyici)

Katılım
7 Nis 2025
Mesajlar
782
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).
Başka bir deyişle, bir hücrede virgülle ayrılmış birden fazla değer veya tekrarlayan gruplar bulunmamalıdır.

Örnek (1NF'e Uygun Değil):

SiparisIDUrunlerMusteriAdi
101ÜrünA, ÜrünBAhmet
102ÜrünCAyş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):

SiparisDetayIDSiparisIDUrunAdMusteriAdi
1101ÜrünAAhmet
2101ÜrünBAhmet
3102ÜrünCAyşe
(Not: Genellikle MusteriAdi yerine MusteriID kullanılır ve ayrı bir Musteriler tablosuna bağlanır, bu da sonraki normal formlara geçişi sağlar.)

2. Normal Form (2NF)

Bir tablo 2. Normal Formdadır eğer:

    1. 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.
Örnek (2NF'e Uygun Değil):

SiparisDetayID (PK)SiparisIDUrunIDUrunAdUrunFiyatMiktar
1101A1ÜrünA102
2101B2ÜrünB201

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)SiparisIDUrunIDMiktar
1101A12
2101B21

Urunler Tablosu:
UrunID (PK)UrunAdUrunFiyat
A1ÜrünA10
B2ÜrünB20

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:

    1. 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.
Örnek (3NF'e Uygun Değil):

MusteriID (PK)MusteriAdSehirSehirKodu
1AhmetAnkara06
2Ayşeİstanbul34

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)MusteriAdSehir
1AhmetAnkara
2Ayşeİstanbul

Sehirler Tablosu:
Sehir (PK)SehirKodu
Ankara06
İstanbul34

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.


 

Şu an konuyu görüntüleyenler

Geri
Üst