EMZETT.
Giriş yap

Birincil anahtarlar ve yabancı anahtarlar: tabloları güvenle bağlamak

Kısaca: Birincil anahtar bir tablonun her satırını benzersiz biçimde tanımlar; yabancı anahtar başka bir tablonun birincil anahtarına işaret eder ve böylece sahipsiz referansları önler.

Biraz daha ayrıntılı: İlişkisel veri tabanları verileri ayrı tablolarda saklar (müşteriler, siparişler). Hangi siparişin hangi müşteriye ait olduğunu bilmek için her satırın benzersiz bir tanımlayıcıya (birincil anahtar), bağlayan tablonun da ona bir referansa (yabancı anahtar) ihtiyacı vardır.

Ayrıntılı

Birincil anahtar (PRIMARY KEY)

Benzersizdir ve asla boş olmaz (NOT NULL). Tipik seçimler sıralı bir sayı (SERIAL/IDENTITY) veya bir UUID’dir. Vekil anahtarlar asla değişmez. Doğal anahtarlar (e-posta, vergi numarası) değişebilir veya tekrarlanabilir ve bu yüzden risklidir. Bir birincil anahtar, örneğin bağlantı tablolarında, birkaç sütunu kapsayabilir (bileşik anahtar). Veri tabanı bunun için otomatik olarak bir dizin oluşturur.

Yabancı anahtar (FOREIGN KEY)

Örnek: orders.customer_id REFERENCES customers(id). Veri tabanı customer_id’si mevcut olmayan satırları reddeder (referans bütünlüğü). Ebeveyn satır silindiğinde veya değiştirildiğinde davranışı tanımlarsın: RESTRICT/NO ACTION (yasakla), CASCADE (birlikte sil), SET NULL (referansı temizle). CASCADE kullanışlıdır ama beklenmedik sayıda satırı silebilir.

Uygulama ve tuzaklar

  • Yabancı anahtar sütunlarını kendin dizinle (PostgreSQL bunu otomatik yapmaz); aksi hâlde join’ler ve silmeler yavaşlar.
  • İlişki türleri: 1:n (yabancı anahtar n tablosunda), n:m (iki yabancı anahtarlı ayrı bağlantı tablosu).
  • UUID mi sayı mı? Sayılar kompakt ve hızlıdır, UUID’ler koordinasyon olmadan dağıtık biçimde üretilebilir ve kayıt sayıları hakkında hiçbir şey ele vermez.
  • Toplu içe aktarmalarda yabancı anahtarları devre dışı bırakma; verileri doğru sırayla yükle.
  • Sorgular yabancı anahtarlar olmadan da çalışır, ancak veri çöpü sızar.

Sınav bakışı

Anahtarlar ilişkisel modele ve normalleştirmeye aittir. Hatırla: birincil anahtar = benzersiz + NULL değil; yabancı anahtar = referans, bütünlüğü sağlar. Bir ER modelinde ilişkiler yabancı anahtarlarla uygulanır.

Ayrıca bak: Join’ler, ER modeli, Normal formlar