← Kursa Dön
📄 Text · 30 min

İlişki Türleri: 1:1, 1:N, N:M

Giriş — Tablolar Arası İlişkiler

İlişkisel veritabanının gücü tablolar arası ilişkilerden gelir. Üç temel ilişki türü vardır ve her biri farklı iş gereksinimlerini karşılar.


1:N (One-to-Many) — En Yaygın İlişki

Bir tablodaki bir kayıt, diğer tabloda birden fazla kayıtla ilişkilidir.

-- Bir müşteri → birçok sipariş
-- customers (1) ──── orders (N)
CREATE TABLE orders (
    order_id INT PRIMARY KEY AUTO_INCREMENT,
    customer_id INT NOT NULL,
    FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
-- FK "çok" taraftadır (orders tablosunda)

-- Bir kategori → birçok ürün
-- Bir departman → birçok çalışan
-- Bir sipariş → birçok sipariş kalemi

Kural: Foreign key her zaman "çok" (N) taraftaki tabloya konur.


1:1 (One-to-One) — Özel Durumlar

Her iki tablodaki bir kayıt, diğer tabloda tam olarak bir kayıtla eşleşir.

-- Müşteri ↔ Müşteri profili (detay bilgiler)
CREATE TABLE customer_profiles (
    customer_id INT PRIMARY KEY,  -- Hem PK hem FK
    bio TEXT,
    avatar_url VARCHAR(500),
    preferences JSON,
    FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
-- customer_id hem PK hem FK — 1:1 ilişkiyi garanti eder

Ne zaman 1:1 kullanılır?

  • Büyük/nadir erişilen sütunları ayırmak (performans)

  • Opsiyonel detay bilgileri (her müşterinin profili olmayabilir)

  • Güvenlik (hassas bilgileri ayrı tabloda tutma)


N:M (Many-to-Many) — Ara Tablo Gerekli

İki tablodaki kayıtlar karşılıklı çoklu ilişkiye sahiptir. Doğrudan kurulamaz — junction table (ara tablo / bridge table) gerekir.

-- Bir sipariş birçok ürün içerir, bir ürün birçok siparişte yer alır
-- orders (N) ◄──── order_items ────► products (M)

CREATE TABLE order_items (
    item_id INT PRIMARY KEY AUTO_INCREMENT,
    order_id INT NOT NULL,
    product_id INT NOT NULL,
    quantity INT NOT NULL,
    unit_price DECIMAL(10,2) NOT NULL,
    FOREIGN KEY (order_id) REFERENCES orders(order_id),
    FOREIGN KEY (product_id) REFERENCES products(product_id),
    UNIQUE KEY (order_id, product_id)  -- Aynı siparişte aynı ürün bir kez
);

-- Başka N:M örnekleri:
-- students ◄── enrollments ──► courses (öğrenci-ders)
-- posts ◄── post_tags ──► tags (yazı-etiket)
-- users ◄── user_roles ──► roles (kullanıcı-rol)

Junction table kuralları:

  • İki foreign key içerir (her iki tablonun PK'sına referans)

  • Kendi PK'sı olabilir (surrogate key) veya composite PK kullanılır

  • Ek sütunlar içerebilir (quantity, unit_price, enrollment_date vb.)


İlişki Türünü Belirleme

Bir ilişki tasarlarken şu soruları sor:

SoruCevapİlişki Türü
Bir müşterinin kaç siparişi olabilir? Birçok. Bir siparişin kaç müşterisi olabilir? Bir.1:NFK orders'ta
Bir siparişin kaç ürünü olabilir? Birçok. Bir ürün kaç siparişte olabilir? Birçok.N:MJunction table
Bir müşterinin kaç profili olabilir? Bir. Bir profilin kaç müşterisi olabilir? Bir.1:1FK child'da (PK olarak)

Özet

  • 1:N: FK "çok" tarafta — en yaygın ilişki türü

  • 1:1: FK child tabloda, PK olarak da kullanılabilir — özel durumlar için

  • N:M: Junction table ile çözülür — iki FK + opsiyonel ek sütunlar

  • İlişki türünü doğru belirlemek, veritabanı tasarımının temelidir