İ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ş kalemiKural: 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 ederNe 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:
| Soru | Cevap | İlişki Türü |
|---|---|---|
| Bir müşterinin kaç siparişi olabilir? Birçok. Bir siparişin kaç müşterisi olabilir? Bir. | 1:N | FK orders'ta |
| Bir siparişin kaç ürünü olabilir? Birçok. Bir ürün kaç siparişte olabilir? Birçok. | N:M | Junction table |
| Bir müşterinin kaç profili olabilir? Bir. Bir profilin kaç müşterisi olabilir? Bir. | 1:1 | FK 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
AI Asistan
Sorularını yanıtlamaya hazır