Veri Tabanı Yönetimi ve SQL

Primary Key ve Foreign Key Nedir Tablo Bağlantıları Nasıl Kurulur

Primary Key (Birincil Anahtar) ve Foreign Key (Yabancı Anahtar), ilişkisel veri tabanlarında verilerin benzersiz şekilde kimliklendirilmesini ve tablolar arasında mantıksal bağlar kurulmasını sağlayan temel yapı taşlarıdır. Günlük hayatta kullandığımız bankacılık sistemlerinden e-ticaret sitelerine ve okul otomasyonlarına kadar tüm dijital yazılımlar, verilerin doğrulukla saklanması ve tutarlılığının korunması için bu anahtar mekanizmalarına bağımlıdır.

🎯 Bu Derste Öğrenecekleriniz
  • Primary Key ve Foreign Key kavramlarının mantığını ve farklarını anlamak
  • İlişkisel veri tabanlarında referans bütünlüğü (Referential Integrity) kuralını öğrenmek
  • SQL dili kullanarak birbiriyle bağlantılı tablolar oluşturabilmek
  • Bire Bir, Bire Çok ve Çoka Çok tablo bağlantı türlerini uygulamak
📌 Bu Konuda Bilmeniz Gerekenler
  • Primary Key: Tablodaki her bir satırı (kaydı) benzersiz kılan sütundur; asla boş (NULL) olamaz.
  • Foreign Key: Bir tablodaki verinin başka bir tablodaki Primary Key ile eşleşmesini sağlayan sütundur.
  • Referans Bütünlüğü: Foreign Key sayesinde var olmayan bir veriye işaret eden ‘yetim kayitların’ oluşması engellenir.
  • İlişki Türleri: Tablolar birbiriyle 1:1, 1:N veya N:M ilişkileri üzerinden bağlanır.

İlişkisel Veri Tabanı Mantığı ve Anahtar Kavramlar

İlişkisel Veri Tabanı Yönetim Sistemleri (RDBMS), verileri tek bir devasa tablo yerine mantıksal olarak ayrılmış küçük ve odaklanmış tablolar halinde saklar. Örneğin bir e-ticaret sisteminde; müşteriler, ürünler ve siparişler ayrı ayrı tablolarda tutulur. Bu yaklaşım veri tekrarını önler, belleği verimli kullanır ve veri bütünlüğünü sağlar.

Ayrılmış bu tabloların birbiriyle haberleşebilmesi ve hangi siparişin hangi müşteri tarafından verildiğinin bilinebilmesi için anahtar (key) mekanizmaları kullanılır. Veri tabanı tasarımında anahtarlar, verilerin aranmasını hızlandırır ve tablolar arası köprü görevini üstlenir.

Primary Key (Birincil Anahtar) Nedir?

Primary Key, bir veri tabanı tablosundaki her bir satırı diğerlerinden ayıran benzersiz bir sütun veya sütun grubudur. Türkiye Cumhuriyeti Kimlik Numarası, bir okul veri tabanındaki Öğrenci Numarası veya bir e-ticaret sitesindeki Ürün ID değeri mükemmel birer Primary Key örneğidir.

Primary Key kullanırken uyulması gereken üç temel kural vardır:

  • Benzersizlik (Uniqueness): Sütundaki hiçbir değer birbiriyle aynı olamaz. Her kayıt tekildir.
  • Boş Bırakılamazlık (Not Null): Primary Key alanı kesinlikle boş (NULL) geçilemez. Her kaydın mutlaka bir anahtar değeri olmalıdır.
  • Değişmezlik (Immutability): Primary Key değerlerinin zaman içinde değiştirilmemesi hedeflenir. Değişim, bağlı olduğu diğer tabloları olumsuz etkiler.

Bir tabloda yalnızca bir adet Primary Key bulunabilir. Ancak bu anahtar, birden fazla sütunun birleşimiyle oluşturulabilir. Bu tür yapıya Composite Key (Bileşik Anahtar) adı verilir.

📖 Örnek: Primary Key SQL Tanımlaması

Aşağıdaki SQL kodunda ‘Ogrenciler’ tablosu oluşturulmakta ve ‘ogrenci_id’ sütunu birincil anahtar olarak belirlenmektedir:

CREATE TABLE Ogrenciler (
  ogrenci_id INT PRIMARY KEY AUTO_INCREMENT,
  ad VARCHAR(50) NOT NULL,
  soyad VARCHAR(50) NOT NULL
);

💡 İpucu: Genellikle otomatik artan tam sayı değerleri (AUTO_INCREMENT veya IDENTITY) Primary Key olarak seçilir. Bu hem performansı artırır hem de anahtarın benzersizliğini veri tabanı motoruna devrederek hata riskini azaltır.

Foreign Key (Yabancı Anahtar) Nedir?

Foreign Key, bir tablodaki sütunun (veya sütun grubunun), başka bir tablodaki Primary Key sütununa işaret etmesiyle kurulan bağdır. Foreign Key’in bulunduğu tabloya Çocuk Tablo (Child Table), işaret edilen Primary Key’in bulunduğu tabloya ise Ana Tablo (Parent Table) denir.

Foreign Key mekanizmasının ana amacı Referans Bütünlüğünü (Referential Integrity) korumaktır. Bu kural sayesinde, ana tabloda karşılığı olmayan bir değerin çocuk tabloya eklenmesi engellenir. Örneğin, veri tabanınızda kaydı bulunmayan ‘999’ ID’li bir müşteriye sipariş oluşturamazsınız.

⚠️ Dikkat: Foreign Key alanları varsayılan olarak NULL değer kabul edebilir. Bir Foreign Key değerinin boş bırakılması, o kaydın henüz bir ana tablo kaydıyla ilişkilendirilmediği anlamına gelir. Ancak bu alana bir değer girilecekse, girilen değer mutlaka ana tablodaki Primary Key listesinde var olmalıdır.
ℹ️ Bilgi: Silme ve Güncelleme Kuralları (CASCADE Operations)
Ana tablodaki bir kayıt silindiğinde veya güncellendiğinde çocuk tablodaki bağlı kayıtların ne olacağını belirleyebilirsiniz. Örneğin ON DELETE CASCADE kuralı koyarsanız, müşteri silindiğinde o müşteriye ait tüm siparişler de otomatik olarak silinir. ON DELETE SET NULL kuralında ise sipariş durur ancak müşteri bilgisi boş bırakılır.

Primary Key ve Foreign Key Karşılaştırması

Bu iki anahtar kavramı arasındaki farkları netleştirmek, veri tabanı tasarımını doğru yapabilmek için çok önemlidir. Aşağıdaki tablo iki kavramın temel farklarını özetlemektedir:

ÖzellikPrimary KeyForeign Key
Temel AmacıSatırları benzersiz şekilde tanımlar.Tablolar arasında ilişki ve bağ kurar.
NULL DeğerKesinlikle NULL alamaz.NULL değer alabilir.
Tablo Başına SayıHer tabloda en fazla 1 adet bulunur.Bir tabloda birden fazla bulunabilir.
Tekrarlayan DeğerTüm değerler benzersiz olmak zorundadır.Aynı değer birden fazla kez tekrarlayabilir.

Tablo Bağlantı Türleri Nasıl Kurulur?

Veri tabanı tasarımında ilişkiler verilerin iş mantığına göre üç farklı şekilde yapılandırılır.

1. Bire Bir (1:1) İlişki

Bir tablodaki bir kaydın, diğer tabloda yalnızca bir karşılığının bulunduğu ilişki türüdür. Genellikle güvenlik, performans veya detay verileri ayırmak için kullanılır. Örneğin; bir ‘Kullanıcılar’ tablosu ile kullanıcıya ait gizli bilgilerin tutulduğu ‘KullanıcıDetay’ tablosu arasındaki ilişki bire birdir.

2. Bire Çok (1:N) İlişki

Veri tabanı tasarımında en sık kullanılan ilişki tipidir. Ana tablodaki tek bir kayıt, çocuk tabloda birden fazla kayıtla eşleşebilir. Ancak çocuk tablodaki bir kayıt, ana tabloda yalnızca tek bir kayıtla ilişkilidir. Örneğin; bir ‘Müşteri’ birden fazla ‘Sipariş’ verebilir, ancak her ‘Sipariş’ yalnızca bir ‘Müşteri’ye aittir.

📖 Örnek: Bire Çok İlişki SQL Uygulaması

Aşağıdaki SQL kodunda Siparişler tablosundaki ‘musteri_id’ alanı, Musteriler tablosundaki ‘musteri_id’ birincil anahtarına Foreign Key olarak bağlanmaktadır:

CREATE TABLE Musteriler (
  musteri_id INT PRIMARY KEY AUTO_INCREMENT,
  ad_soyad VARCHAR(100) NOT NULL
);

CREATE TABLE Siparisler (
  siparis_id INT PRIMARY KEY AUTO_INCREMENT,
  tarih DATE NOT NULL,
  musteri_id INT,
  FOREIGN KEY (musteri_id) REFERENCES Musteriler(musteri_id)
);

3. Çoka Çok (N:M) İlişki

Bir tablodaki birden fazla kaydın, diğer tablodaki birden fazla kayıtla ilişkili olduğu durumdur. Örneğin; bir ‘Öğrenci’ birden fazla ‘Ders’ alabilir ve bir ‘Ders’ birden fazla ‘Öğrenci’ tarafından tercih edilebilir. İlişkisel veri tabanları iki tablo arasında doğrudan çoka çok ilişki kurulmasına izin vermez.

Bu sorunu çözmek için Junction Table (Ara Tablo / Bağlantı Tablosu) kullanılır. Çoka çok ilişki, iki adet bire çok ilişkiye dönüştürülür. Ara tablo, her iki ana tablonun Primary Key değerlerini Foreign Key olarak kendi bünyesinde barındırır.

Tablo Bağlantıları Kurulurken Sık Yapılan Hatalar

İlişkisel veri tabanı tasarlarken yapılan bazı yaygın hatalar sistemin yavaşlamasına veya mantıksal hatalara yol açabilir:

  • Veri Tipi Uyumsuzluğu: Foreign Key olarak tanımlanan sütunun veri tipi, bağlandığı Primary Key sütunu ile birebir aynı olmalıdır (Örn: Biri INT iken diğerinin VARCHAR yapılması hataya sebep olur).
  • İndeks Kullanmamak: Foreign Key sütunları sorgularda sıklıkla birleştirme (JOIN) işlemine tabi tutulur. Bu sütunlarda indeks oluşturmamak büyük veri setlerinde ciddi performans kayıplarına yol açar.
  • Referans Kontrollerini İhmal Etmek: İş mantığına aykırı silme ve güncelleme kuralları tanımlamak (örneğin kontrolsüz CASCADE kullanımı) yanlışlıkla kritik verilerin silinmesine yol açabilir.
✏️ Kendinizi Test Edin
  1. Bir veri tabanı tablosunda neden birden fazla Primary Key tanımlanamaz? Composite Key ile bu durum nasıl çözülür?
  2. Foreign Key barındıran bir tabloya, ana tabloda karşılığı olmayan bir kayıt eklemeye çalışırsak veri tabanı nasıl bir tepki verir?
  3. Öğrenci ve Kitap (Kütüphane ödünç alma sistemi) arasındaki ilişki türü nedir ve bunu SQL’de kurmak için kaç tabloya ihtiyaç duyulur?
  4. ON DELETE CASCADE kuralının avantajları ve potansiyel riskleri nelerdir?
📝 Konu Özeti
  • Primary Key her satırı benzersiz biçimde tanımlar, tekildir ve NULL olamaz.
  • Foreign Key başka bir tablonun birincil anahtarına referans vererek tabloları birleştirir.
  • Veri tabanındaki ilişkiler 1:1, 1:N ve N:M (Ara tablo ile) modelleriyle inşa edilir.
  • İlişkisel yapı sayesinde veri tekrarı önlenir ve veri bütünlüğü (Referential Integrity) garanti altına alınır.

Öğrendiklerinizi Pekiştirin

Primary Key ve Foreign Key yapıları, sadece teorik bir ders konusu değil, yazılım geliştirme dünyasının en temel yapı taşıdır. Tasarlayacağınız veri tabanlarında doğru anahtar tercihlerinde bulunmak, uygulamanızın hızı, güvenliği ve ölçeklenebilirliği üzerinde doğrudan belirleyici olacaktır.

Öğrendiğiniz bu bilgileri pekiştirmek için bilgisayarınıza SQLite veya MySQL kurarak basit bir e-ticaret veri tabanı şeması çizmeyi deneyebilir, `CREATE TABLE` ve `FOREIGN KEY` komutlarıyla pratik yapabilirsiniz.

Deniz Karay

DersMerkezi.net.tr’nin yazarı, eğitim alanında yıllara dayanan deneyime sahip bir uzmandır ve öğrencilerin öğrenme sürecini desteklemeyi hedefler. Matematik, fen bilimleri, tarih, dil ve edebiyat başta olmak üzere birçok ders alanında içerik üretir ve konuları sade, anlaşılır ve adım adım rehberler halinde sunar.

İlgili Makaleler

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu