# Veritabanı Normalizasyonu

Adres: https://softwaredictionary.org/tr/terimler/normalization
Kategori: Veritabanları
Son güncelleme: 2026-09-30
İngilizcesi: Database Normalization
Türkçe karşılığı: normalleştirme
Okunuşu: deytıbeys normılayzeyşın

Kısaca: Veritabanı normalizasyonu, her bilginin yalnızca bir kez saklanması için tabloları düzenleme sürecidir; tekrarlı veriyi azaltıp tutarsız güncellemeleri önler.

## Veritabanı normalizasyonu nedir?

Normalizasyon, ilişkisel bir veritabanını her bilgi parçası tam olarak tek bir yerde yaşayacak şekilde tasarlama yöntemidir. Bir müşterinin adresini her sipariş satırında tekrarlamak yerine, müşterileri bir tabloda, siparişleri başka bir tabloda saklar ve bunları bir yabancı anahtarla bağlarsınız. Fikir, 1970'lerin başında ilişkisel modelin mucidi Edgar F. Codd tarafından ortaya atıldı.

Süreç, her biri bir öncekinin üzerine kurulan bir dizi normal form olarak tanımlanır. Birinci normal form (1NF) her sütunun tek bir değer tutmasını, bir hücreye liste doldurulmamasını gerektirir; ikinci normal form (2NF) anahtar olmayan her sütunun birincil anahtarın yalnızca bir kısmına değil, tamamına bağlı olmasını gerektirir; üçüncü normal form (3NF) ise anahtar olmayan sütunların diğer anahtar olmayan sütunlara değil, yalnızca anahtara bağlı olmasını gerektirir. Boyce-Codd normal formu (BCNF) gibi daha katı formlar da vardır, ancak pratikte hedef genellikle 3NF'tir.

Normalizasyon, güncelleme anomalileri denen sorunları önler. Bir müşterinin e-postası 500 sipariş satırına kopyalanmışsa, onu değiştirmek 500 satırı güncellemek demektir ve birini kaçırmak verinin kendisiyle çelişmesine yol açar. Bu, bir arkadaşınızın telefon numarasını onlarca defterin içine yazmak yerine tek bir ortak rehber tutmaya benzer: numara değiştiğinde onu bir kez güncellersiniz.

Normalizasyon çoğu zaman, birleştirmelerden kaçınarak okumaları hızlandırmak için bazı verileri bilerek çoğaltan denormalizasyonla birlikte tartılır; bu, raporlama sistemlerinde, önbelleklerde ve birçok NoSQL tasarımında yaygın bir tercihtir. Genel tavsiye, önce doğruluk için normalize etmek, ardından yalnızca ölçümler gerçek bir performans ihtiyacı gösterdiğinde belirli noktaları denormalize etmektir. Veritabanı normalizasyonu, makine öğrenmesinde sayıları ortak bir aralığa ölçekleme anlamına gelen veri normalizasyonuyla da ilgisizdir.

## Önemli noktalar

- Normalizasyon, tekrarlı ve çelişkili veriyi önlemek için her bilgiyi bir kez saklar.
- Tablolar veri kopyalamak yerine birincil ve yabancı anahtarlarla bağlanır.
- 1NF, 2NF ve 3NF normal formları giderek daha katı kurallardır.
- Uygulama veritabanları için genellikle hedef üçüncü normal formdur.
- Denormalizasyon, gerektiğinde bir miktar tekrarı daha hızlı okumalarla takas eder.

## Örnek: Tekrarlanan veriyi ayrı tablolara bölmek

```sql
-- Not normalized: customer details repeat on every order
-- orders(id, customer_name, customer_email, total)

-- Normalized: each customer is stored once and referenced by ID
CREATE TABLE customers (
  id    BIGINT PRIMARY KEY,
  name  TEXT NOT NULL,
  email TEXT NOT NULL UNIQUE
);

CREATE TABLE orders (
  id          BIGINT PRIMARY KEY,
  customer_id BIGINT NOT NULL REFERENCES customers (id),
  total       NUMERIC(10, 2) NOT NULL
);
```

## Sık sorulan sorular

**1NF, 2NF ve 3NF nedir?**

İlk üç normal formdur. 1NF her sütunda tek bir değer olmasını gerektirir, 2NF bileşik anahtarın yalnızca bir kısmına bağlı olan sütunları kaldırır, 3NF ise anahtara değil de diğer anahtar olmayan sütunlara bağlı olan sütunları kaldırır.

**Denormalizasyon nedir?**

Denormalizasyon, okumaları hızlandırmak için veritabanına bilerek tekrarlı ya da önceden hesaplanmış veri eklemektir; bedeli daha fazla depolama alanı ve kopyaları senkron tutmak için ek iştir.

**Her veritabanı tamamen normalize edilmeli mi?**

Zorunlu değil. Çoğu işlemsel uygulama veritabanı üçüncü normal formu hedefler; analitik ambarlar ve okuma ağırlıklı sistemler ise sorguları hızlandırmak için çoğu zaman bilerek denormalize eder.

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
