Veritabanı

SQL’de Birincil ve Yabancı Anahtar

SQL'de Birincil ve Yabancı Anahtar

İlişkisel veritabanı yönetim sistemlerinin (RDBMS) temel çalışma mantığı, verilerin mantıksal tablolara bölünmesi ve bu tabloların belirli kurallar çerçevesinde birbiriyle haberleşmesi üzerine kuruludur. Büyük ölçekli yazılımlarda yüzlerce tablonun ve milyonlarca satır verinin bulunduğu senaryolarda, her bir verinin tekil olarak ayırt edilmesi ve tablolar arasındaki ilişkilerin kopmaması hayati bir öneme sahiptir. Veritabanı mimarisinde bu düzeni sağlayan en temel iki yapı taşı; birincil anahtar (Primary Key) ve yabancı anahtar (Foreign Key) kısıtlamalarıdır.

Birincil Anahtar (Primary Key) Nedir?

Birincil anahtar, bir veritabanı tablosundaki her satırı benzersiz bir şekilde tanımlayan kısıtlamadır (constraint). Bir tabloda kimlik numarası, kullanıcı kimliği veya sipariş numarası gibi her kayıtta farklı olan sütunlar bu amaçla kullanılır. SQL mimarisinde birincil anahtar tanımlandığında, veritabanı motoru ilgili sütun üzerinde otomatik olarak benzersiz bir indeks (unique index) oluşturur ve veri arama işlemlerinin yüksek performansla gerçekleşmesini sağlar.

Veritabanı tasarımında sql primary key kullanımı veri bütünlüğünün ilk adımıdır. Birincil anahtar olmadan bir tabloda birbirinin tamamen kopyası olan satırlar birikebilir ve bu durum sorgulama, güncelleme veya silme işlemlerinde ciddi veri karmaşasına yol açar.

Birincil Anahtarın Temel Özellikleri

  • Benzersizlik (Uniqueness): Sütundaki her bir değer yalnızca bir kez bulunabilir, mükerrer kayda izin verilmez.
  • Boş Değer İçermeme (Not Null): Birincil anahtar sütununda yer alan alanlar kesinlikle boş (NULL) bırakılamaz.
  • Tek Tabloda Tek Anahtar: Bir tabloda yalnızca bir adet birincil anahtar bulunabilir; ancak bu anahtar birden fazla sütunun birleşiminden (Composite Key) oluşabilir.
  • Değişmezlik: Birincil anahtar olarak seçilen verinin zaman içinde güncellenmeyecek veya nadiren güncellenecek bir değer olması tercih edilir.

SQL ile Birincil Anahtar Tanımlama

Birincil anahtar iki farklı yöntemle tanımlanabilir: Tablo oluşturulurken veya mevcut bir tabloya sonradan kısıtlama eklenerek. Aşağıdaki örnekte, yeni bir kullanıcılar tablosu oluşturulurken kimlik sütununa birincil anahtar kuralı tanımlanmaktadır.

CREATE TABLE Kullanicilar (
    KullaniciID INT NOT NULL,
    Ad VARCHAR(50) NOT NULL,
    Soyad VARCHAR(50) NOT NULL,
    Eposta VARCHAR(100) NOT NULL,
    PRIMARY KEY (KullaniciID)
);

Bu komutta KullaniciID sütunu INT veri tipiyle tanımlanmış ve tablonun sonunda PRIMARY KEY (KullaniciID) ifadesiyle birincil anahtar olarak belirlenmiştir. Bu sayede veritabanı, aynı KullaniciID değerine sahip ikinci bir satırın eklenmesini doğrudan engelleyecektir.

Halihazırda var olan bir tabloya sonradan birincil anahtar eklemek gerektiğinde ALTER TABLE komutu kullanılır:

ALTER TABLE Kullanicilar
ADD PRIMARY KEY (KullaniciID);

Bu işlemin başarılı olabilmesi için KullaniciID sütununda önceden tanımlanmış boş (NULL) veya yinelenen değer bulunmaması zorunludur.

Yabancı Anahtar (Foreign Key) Nedir?

Yabancı anahtar, bir tablodaki sütunun başka bir tablodaki birincil anahtara (veya benzersiz anahtara) referans vermesini sağlayan yapıdır. Bu sayede iki tablo arasında mantıksal ve kurallı bir ilişki kurulur. Yabancı anahtarın bulunduğu tabloya “çocuk tablo” (child table), referans alınan tabloya ise “ana tablo” (parent table) adı verilir.

Yabancı anahtarların en temel işlevi referans bütünlüğünü (referential integrity) korumaktır. Başka bir deyişle, sistemde kayıtlı olmayan bir kullanıcıya sipariş atanmasını veya mevcut bir kullanıcının silindiğinde ona ait siparişlerin havada (yetim kayıt / orphan record) kalmasını engeller.

Yabancı Anahtarın Kuralları ve Davranışları

  • Değer Eşleşmesi: Çocuk tablodaki yabancı anahtar değeri, mutlaka ana tablodaki birincil anahtar değerlerinden biriyle eşleşmelidir.
  • Boş Değer İstisnası: Birincil anahtarın aksine, yabancı anahtar sütunu aksi belirtilmedikçe NULL değer kabul edebilir.
  • İlişkisel Eylemler: Ana tablodaki bir kayıt silindiğinde veya güncellendiğinde, çocuk tablodaki bağlı kayıtların nasıl davranacağı belirlenebilir:
  • CASCADE: Ana tablodaki kayıt silinirse veya güncellenirse, bağlı tüm çocuk kayıtlar da otomatik olarak silinir veya güncellenir.
  • SET NULL: Ana tablodaki kayıt silindiğinde, bağlı çocuk tablodaki yabancı anahtar alanı NULL yapılır.
  • RESTRICT veya NO ACTION: Bağlı alt kayıtlar varken ana tablodaki kaydın silinmesini veya değiştirilmesini engeller.

SQL ile Yabancı Anahtar Tanımlama

Kullanıcıların siparişlerini tutan bir tablo oluşturulduğunda, her siparişin hangi kullanıcıya ait olduğunu belirtmek için yabancı anahtar kullanılır.

CREATE TABLE Siparisler (
    SiparisID INT NOT NULL,
    SiparisTarihi DATE NOT NULL,
    KullaniciID INT,
    Tutar DECIMAL(10, 2),
    PRIMARY KEY (SiparisID),
    FOREIGN KEY (KullaniciID) REFERENCES Kullanicilar(KullaniciID)
    ON DELETE CASCADE
);

Bu örnekte Siparisler tablosunda SiparisID birincil anahtar, KullaniciID ise Kullanicilar tablosuna bağlanan yabancı anahtardır. Komutun sonuna eklenen ON DELETE CASCADE ifadesi, Kullanicilar tablosundan bir kullanıcı silindiğinde, o kullanıcıya ait tüm sipariş kayıtlarının da otomatik olarak silinmesini sağlar.

Mevcut bir tabloya yabancı anahtar kısıtlaması sonradan şu şekilde eklenebilir:

ALTER TABLE Siparisler
ADD CONSTRAINT FK_KullaniciSiparis
FOREIGN KEY (KullaniciID) REFERENCES Kullanicilar(KullaniciID);

Bu komut ile FK_KullaniciSiparis adında bir kısıtlama tanımlanır. Kısıtlamalara isim vermek, ilerleyen süreçlerde kısıtlamayı kaldırmak veya değiştirmek gerektiğinde kolaylık sağlar.

Birincil ve Yabancı Anahtar Arasındaki Temel Farklar

  • Tanımlayıcılık: Birincil anahtar bulunduğu tablodaki satırları tekil yapar; yabancı anahtar ise başka bir tablodaki tekil satıra işaret eder.
  • NULL Kabulü: Birincil anahtar sütunları NULL değer alamaz; yabancı anahtar sütunları kurguya göre NULL değer alabilir.
  • Tablodaki Sayı: Bir tabloda sadece bir birincil anahtar bulunabilir; fakat bir tablo birden fazla tabloya bağlanarak birden çok yabancı anahtar barındırabilir.
  • İndeksleme: SQL veritabanlarında birincil anahtarlar varsayılan olarak Clustered Index şeklinde otomatik indekslenir; yabancı anahtarların sorgu performansını artırmak için çoğunlukla elle indekslenmesi gerekir.

Veri Bütünlüğü ve Güvenlik Açısından Önemi

Veritabanı güvenliği yalnızca yetkilendirme ve şifreleme mekanizmalarından ibaret değildir. Verinin doğruluğu, bozulmamış olması ve mantıksal bütünlüğü de siber güvenlik ve yazılım kararlılığı kapsamında ele alınır.

Eksik kurgulanmış bir veritabanında meydana gelebilecek tutarsızlıklar; faturalandırma hatalarına, yetkisiz veri sızıntılarına veya yazılım tarafında beklenmeyen çökmelere yol açabilir. Birincil ve yabancı anahtar kısıtlamaları, uygulama katmanında oluşabilecek kodlama hatalarına karşı veritabanı seviyesinde son savunma hattı olarak görev yapar.

Özet ve Sonraki Adımlar

Birincil anahtar (sql primary key) tablodaki verilerin tekilliğini garanti altına alırken, yabancı anahtar (foreign key) tablolar arasındaki ilişkileri koruyarak yetim veya geçersiz verilerin oluşmasını önler. Sağlam temellere sahip bir veritabanı tasarlamak için bu iki kısıtlamanın doğru planlanması şarttır.

Sonraki adım olarak, tablolar arası bu ilişkileri sorgularda birleştirmeyi sağlayan INNER JOIN, LEFT JOIN gibi birleştirme türlerini ve foreign key sütunları üzerinde indeksleme yaparak sorgu performansını artırma yöntemlerini inceleyebilirsiniz.

#foreign key#primary key#rdbms#sql#veritabanı

Yorumlar

Henüz yorum yok. İlk yorumu siz yazın.

Yorum yaz

Yorumlar yönetici onayından sonra yayınlanır.