Yabancı Anahtar Nedir?
İngilizce: Foreign Key
Yayın: · Son güncelleme:
Yabancı Anahtar Nedir? Kısaca
Yabancı anahtar (foreign key), bir tablodaki sütunun başka bir tablonun birincil anahtarına işaret etmesini sağlayan kısıttır. Tablolar arasındaki ilişkiyi kurar ve var olmayan bir kayda bağlantı yapılmasını engeller.

Yabancı anahtar nedir?
Yabancı anahtar, iki tabloyu birbirine bağlayan köprüdür. Bir tablodaki sütun, başka bir tablodaki birincil anahtarın değerini taşır. İngilizcede foreign key, kısaca FK olarak geçer.
Bu bağlantı yalnızca bir alışkanlık değil, veritabanı tarafından denetlenen bir kuraldır. Karşı tabloda bulunmayan bir değeri yabancı anahtar sütununa yazamazsınız.
Nasıl çalışır?
Varsayımsal bir örnekle bakalım. "musteriler" tablosunda id değeri 15 olan Ayşe Hanım kayıtlı olsun. "siparisler" tablosundaki musteri_id sütunu, musteriler.id sütununa yabancı anahtar olarak bağlanır.
Ayşe Hanım'ın siparişi musteri_id = 15 ile kaydedilir. Biri yanlışlıkla musteri_id = 999 yazmaya çalışırsa ve böyle bir müşteri yoksa veritabanı kaydı reddeder. Bu denetime referans bütünlüğü (referential integrity) denir.
Silme ve güncelleme kuralları
Bağlı kaydın silinmesi durumunda ne olacağını siz belirlersiniz:
| Kural | Etkisi |
|---|---|
| RESTRICT / NO ACTION | Bağlı sipariş varsa müşteri silinemez |
| CASCADE | Müşteri silinince siparişleri de silinir |
| SET NULL | Siparişler kalır, musteri_id boşaltılır |
CASCADE pratik görünse de dikkatli kullanılmalıdır. Tek bir silme komutu, zincirleme biçimde yüzlerce kaydı ortadan kaldırabilir.
Nelere dikkat etmeli?
Yabancı anahtar sütunlarına indeks eklemek, JOIN sorgularını ve silme kontrollerini hızlandırır. Bazı geliştiriciler performans kaygısıyla bu kısıtı kaldırır, ancak o zaman bütünlüğü uygulama kodunda sağlamak gerekir ve hata riski artar. Küçük ve orta projelerde kısıtı veritabanında tutmak genellikle daha güvenlidir.
Sıkça Sorulan Sorular
Yabancı anahtar boş olabilir mi?
Evet, sütun NULL değere izin verecek şekilde tanımlanmışsa yabancı anahtar boş bırakılabilir. Bu, "henüz bir müşteriye atanmamış sipariş" gibi durumları ifade etmek için kullanılır.
Yabancı anahtar olmadan tablolar birleştirilebilir mi?
Evet, JOIN sorgusu için yabancı anahtar kısıtı zorunlu değildir. Ancak kısıt olmadığında var olmayan kayıtlara işaret eden hatalı satırlar oluşabilir.