E-R Diyagramları ve Veritabanı Tasarımı
Giriş — Tasarım Koddan Önce Gelir
Veritabanı tasarımı, SQL yazmadan önce yapılır. Tıpkı bir evin planını çizip sonra inşa etmek gibi. E-R (Entity-Relationship) diyagramları, veritabanının görsel haritasıdır.
E-R Diyagramı Bileşenleri
| Bileşen | Sembol | Açıklama |
|---|---|---|
| Entity (Varlık) | Dikdörtgen | Tablo (customers, products) |
| Attribute (Özellik) | Elips | Sütun (first_name, price) |
| Relationship (İlişki) | Eşkenar dörtgen | Tablolar arası bağ |
| Primary Key | Altı çizili | Benzersiz tanımlayıcı |
Basitleştirilmiş E-R Notasyonu (Crow's Foot)
┌───────────┐ ┌──────────┐
│ customers │ 1 N │ orders │
│───────────│─────────│──────────│
│ PK: id │ │ PK: id │
│ name │ │ FK: cust │
│ email │ │ date │
└───────────┘ └──────────┘
Semboller:
──── 1 (bir)
────< N (çok, crow's foot)
──○ Opsiyonel (sıfır olabilir)
──| Zorunlu (en az bir)Veritabanı Tasarım Süreci
Adım 1: Gereksinimleri Topla
İş süreçlerini anla
"Sistem ne yapmalı?" sorusunu cevapla
Saklanması gereken verileri listele
Adım 2: Varlıkları Belirle
İsimler → genellikle varlık (müşteri, ürün, sipariş)
Her varlık bir tablo olur
Adım 3: Özellikleri Belirle
Her varlığın özelliklerini listele
Veri tiplerini ve kısıtlamaları düşün
Primary key belirle
Adım 4: İlişkileri Belirle
Varlıklar arası ilişkileri tanımla
İlişki türünü belirle (1:1, 1:N, N:M)
Foreign key'leri yerleştir
Adım 5: Normalize Et
1NF → 2NF → 3NF adımlarını uygula
Anomalileri kontrol et
Adım 6: Denormalize Et (Gerekiyorsa)
Performans gereksinimlerini değerlendir
Hesaplanmış sütunlar, özet tablolar ekle
E-Ticaret Veritabanı Tasarım Örneği
┌────────────┐ ┌─────────────┐ ┌────────────┐
│ categories │ 1─N │ products │ N─1 │ categories │
│────────────│ │─────────────│ │ (self-ref) │
│ PK: id │ │ PK: id │ └────────────┘
│ name │ │ FK: cat_id │
│ FK: parent │ │ name, price │
└────────────┘ │ stock │
└──────┬──────┘
│ 1
│
│ N
┌──────┴──────┐
│ order_items │
│─────────────│
│ PK: id │
┌────────────┐ │ FK: order │
│ customers │ 1─N │ FK: product │
│────────────│ │ qty, price │
│ PK: id │ └──────┬──────┘
│ name │ │ N
│ email │ │
│ city │ ┌──────┴──────┐
└────────┬───┘ │ orders │
│ 1 │─────────────│
└─────N───│ PK: id │
│ FK: cust_id │
│ date, total │
│ status │
└─────────────┘Tasarım Araçları
| Araç | Açıklama |
|---|---|
| MySQL Workbench | Ücretsiz, EER diagram + forward/reverse engineering |
| dbdiagram.io | Web tabanlı, DSL ile hızlı diagram |
| draw.io | Genel amaçlı, E-R şablonları var |
| DBeaver | E-R diagram görselleştirme |
| Lucidchart | Profesyonel diagram aracı |
Best Practices
İsimlendirme tutarlılığı: snake_case, İngilizce, çoğul tablo isimleri
Her tabloda surrogate PK:
id INT AUTO_INCREMENT PRIMARY KEYForeign key'leri explicit tanımla: Veri bütünlüğü garanti altında
Tarih sütunları ekle:
created_at,updated_ather tabloda olmalıSoft delete düşün:
is_activeveyadeleted_atsütunuBelgelendirme: E-R diyagramını güncel tut
Özet
E-R diyagramları veritabanı yapısının görsel haritasıdır
Tasarım süreci: gereksinimler → varlıklar → özellikler → ilişkiler → normalizasyon
Crow's foot notasyonu ilişki türlerini gösterir
Tasarım koddan önce gelir — düzeltmesi çok daha ucuzdur
MySQL Workbench, dbdiagram.io gibi araçlar süreci kolaylaştırır
AI Asistan
Sorularını yanıtlamaya hazır