İçeriğe geç
parazade

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?
İçindekiler
  1. Yabancı anahtar nedir?
  2. Nasıl çalışır?
  3. Silme ve güncelleme kuralları
  4. Nelere dikkat etmeli?

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.

İlgili terimler

Birincil Anahtar(Primary Key)Birincil anahtar (primary key), bir veritabanı tablosundaki her satırı benzersiz biçimde tanımlayan sütun ya da sütunlar grubudur. Değeri boş bırakılamaz ve aynı tabloda iki kez kullanılamaz.JOINJOIN, SQL'de iki veya daha fazla tablodaki satırları ortak bir sütun üzerinden eşleştirip tek bir sonuç tablosunda birleştiren ifadedir. Genellikle birincil anahtar ile yabancı anahtar eşleştirilerek kullanılır.İlişkisel Veritabanı(Relational Database)İlişkisel veritabanı, verileri satır ve sütunlardan oluşan tablolarda saklayan ve tabloları ortak anahtarlarla birbirine bağlayan veritabanı türüdür. Veriler SQL diliyle sorgulanır ve güncellenir.Veritabanı Tablosu(Database Table)Veritabanı tablosu, ilişkisel bir veritabanında aynı türdeki kayıtları satırlar ve sütunlar hâlinde saklayan temel yapıdır. Her satır bir kaydı, her sütun o kayda ait bir özelliği temsil eder.Veritabanı(Database)Veritabanı, verilerin düzenli, aranabilir ve güncellenebilir biçimde saklandığı elektronik kayıt sistemidir. Müşteri listeleri, siparişler ve ürün bilgileri gibi veriler veritabanlarında tutulur.Küme(Set)Küme (set), programlamada her değeri yalnızca bir kez tutan, sırasız bir veri yapısıdır. Tekrar eden kayıtları ayıklamak ve birleşim, kesişim gibi matematiksel küme işlemleri yapmak için kullanılır.NullNull, programlamada bir değişkenin bilerek boş bırakıldığını, yani hiçbir değer göstermediğini belirten özel değerdir. Sıfır ya da boş metinden farklıdır; Python'da bunun karşılığı None'dır.İndeks(Index)İndeks, veritabanında belirli sütunlardaki değerleri sıralı bir yapıda tutarak aranan kayıtların tüm tabloyu taramadan hızlıca bulunmasını sağlayan yardımcı veri yapısıdır. Kitabın sonundaki dizine benzer.