Key, Primary Key, Unique Key ve Foreign Key Tanımlamaları

Key, Primary Key, Unique Key ve Foreign Key Tanımlamaları

Ağustos 11, 2023

Okuma süresi: 5 dakika

Key (Anahtar)

Key (anahtar) veri tabanı içeriğinde, bir veya daha fazla alanın bir satırı nitelemesi amacıyla tanımlanması olarak özetlenebilir. Bir anahtar farklı amaçlar doğrultusunda kullanılabilecek Unique Key (Tekil Anahtar), Primary Key (Birincil Anahtar) ve Foreign Key (Yabancı Anahtar) gibi özel bir tip ile tanımlanabilir.

Karşınıza çıkabilecek diğer anahtar tipler ise şöyle; Super Key, Candidate Key, Alternate Key ve Composite/Compound Key, ancak bu tiplere başka bir yazıda değinmek daha uygun olacaktır. Unutmadan, örnekler ve açıklamalarda anahtarlara dair PRI, UNI, ALT gibi kısaltmalar görülebilir. Karşılaşılabilecek muhtemel durumlara dair parantez içerisinde ek bilgilere yer verdim.

O halde, anahtarlar ve özelliklerine dair açıklamalara geçebiliriz.

Unique Key (UNI / Tekil / Benzersiz Anahtar)

Unique Key (tekil anahtar), yer aldığı tablo içerisinde bir değeri sadece bir kere alır. İlgili değerin tekrar atanmasına izin verilmez. İşlevi Primary Key (birincil anahtar) ile benzerlik taşısa da, en önemli farklılık Unique Key’in NULL değeri alabilir oluşudur.

Primary Key (PRI / Birincil Anahtar)

Primary Key (birincil anahtar), bir veri tablosunda yer alan her satır için bir vekil / tanımlayıcı (identify) görevi görür, kısıtlamadır (constraint) ve eşsizdir. Satırlara ait değerlerin karışmaması adına bu alana ait bilginin tekrarlanmaması gerekir. Temel işlevi, verilerin hangi satıra dizileceğine (veya hangi satırda verilerin düzenleneceğine) karar vermesidir. Çoğunlukla tek bir alan (id, user_id, e_mail, username, national_identification_number vb.) olarak kullanılsa da birden fazla alanın birleşimiyle de oluşturulabilir ve genelde sayılar birincil anahtar olarak seçilirler, ancak zorunluluk değildir. Birincil anahtar değeri boş geçilemez ve NULL değer alamaz. İlişkisel veri tabanlarında (relational database management system) mutlaka birincil anahtar olmalıdır. Unutmadan, her birincil anahtar benzersiz iken her benzersiz anahtar birincil değildir. Benzersiz anahtar başlığı altında NULL kullanımına dair bir açıklama düşmüştüm. Bu başlık altında aradaki farklılıkları biraz daha detaylandıralım;

  • Bir tablo içerisinde birden fazla alan tek bir birincil anahtar ile tanımlanabilir. Ancak, birincil anahtar yapısı her tabloda sadece bir tane olabilir. Benzersiz anahtarda ise böyle bir sınırlama yoktur.
  • Birincil anahtarda NULL kullanıma izin verilmez. Ancak, benzersiz anahtarlarda NULL kayıtlara izin verilir.
  • Birincil anahtar ile veri tablosu üzerinde bir INDEX tanımı oluşturulur ve her kaydın benzersiz bir tanımı yapılır. Benzersiz anahtar kullanımında ise değerlerin benzersiz olup olmadığına bakılır. Elbette benzersiz anahtarlar da INDEX adıyla tanımlanabilirler ancak bu sadece bir tanımlama olacaktır.

Foreign Key (Yabancı Anahtar)

Foreign Key (yabancı anahtar) ikincil anahtar olarak da ifade edilmektedir. Bir veri tablosuna girilebilecek değerleri başka bir veri tablosundaki alanlarla ilişkilendirmeye yarar. Özetle, başka bir tablonun birincil anahtarının bir diğer tablo içerisinde yer almasıdır. Çoğunlukla bir ana tablo (parent) ile alt tablonun (child) ilişkilendirilmesinde kullanılır. Bu sayede olası veri tekrarlarının önüne geçilebilmekte ve ilerleyen zamanda söz konusu olabilecek güncellemelerde ilgili verilerin her yerde güncellenmesi sağlanabilmektedir.

Yukarıdaki açıklamaları biraz daha anlaşılır hale getirmek için şöyle örnek iki tablo oluşturalım ve aralarındaki ilişkiye bakalım1.

SUPER KEY
ALTERNATE KEY
PRIMARY KEY UNIQUE KEY FOREIGN KEY
# ID RollNo EnrollNo Name DeptID
1 60391401 Vin AX101 Delhi 1
2 60391402 Amit AX102 Noida 1
3 60391403 Mohan AX103 Ghaziabad 2
4 60391404 Pavan AX104 Ghaziabad 2
5 60391405 Deepak AX105 Delhi 3
6 60391406 Jitendra AX106 Delhi 3

Yukarıdaki tablomuzun adı Tablo 1 olsun. Bu tabloda yer alan ID sütunu benzersiz anahtarlarımızı barındırmakta ve benzersiz olan her ID değeri ilgili satırı tanımlamakta. Tablo 1’e eklenen her satırda ID yeni bir değer (çoğunlukla bir fazlası; auto increment) almakta. Aşağıdaki tablomuzun adı da Tablo 2 olsun.

PRIMARY KEY
# DeptID Name Address
1 1 IT Delhi
2 2 Mechanical Delhi
3 3 Electrical Delhi

Tablo 2’de ise benzersiz ID’lerimiz DeptID sütununda yer almaktalar ve Tablo 2’ye eklenen yer veri yeni bir satır ve benzersiz yeni bir değer olarak DeptID üzerinden tanımlanacaktır. Tablo 1 ve Tablo 2’ye birlikte baktığımızda ise DeptID’nin her iki tabloda da yer aldığını görebiliriz. Tablo 1’deki DeptID ise benzersiz değildir ve aynı değerleri alabilir. Çünkü işlevi Tablo 2 ile olan ilişkiyi sağlamaktır. Başka bir tabloda (örn. Tablo 3) da Tablo 1’in ID değerini (potansiyel diğer alanlar; RollNo ve EnrollNo) benzer şekilde kullanabiliriz. DeptID kullanımında olduğu gibi bu tür kullanımlarda DeptID kendi tablosu içerisinde benzersiz anahtar, ilişkilendirildiği tablo içerisinde ise ikincil anahtar olarak nitelendirilir. Elbette bu sütun isimleri aynı olmak zorunda değil, ancak okunabilirlik için genelde ilişkili sütunların benzer isimler taşıması ([diğer tablo adı]_id) tercih edilir.

Örneğimizi bir de ilişkili bir kullanım üzerinden verelim ve wp_postmeta tablosuna bir göz atalım2.

Field Type Null Key Default Extra
meta_id bigint(20) unsigned PRI auto_increment
post_id bigint(20) unsigned IND 0
meta_key varchar(255) YES IND NULL
meta_value longtext YES NULL

Yukarıdaki tabloda meta_id (ve ilgili sayfada *_id tanımlamalarının hepsi) PRI (bkz. KEY sütunu) olarak tanımlı olduğunu görebilirsiniz. Bu sayede referans ID değerleri ile ilgili satırları işaretleyebilir ve işlemler (güncelleme, silme vb.) gerçekleştirebiliriz.

Yukarıdaki örnekleri ve tanımları özetlemek gerekirse, farklı veri tablolarıyla ilgili işlemler gerçekleştirdiğimizde bu tablolar arasında çeşitli ilişkiler belirleriz. Elbette bu ilişkiler doğrudan tanımlanabilecekleri gibi (tablonun oluşturulması aşamasında) sonradan belirlenebilir ilişkiler de olabilirler. Bu tür durumlarda benzersiz alanlardan faydalanır, veri tablolarını ilişkilendirir ve verileri birleştirebiliriz. Böylelikle daha kapsamlı verileri tablolar dahilinde değerlendirme ve görselleştirme imkanımız olur. Bu tür durumlara en basit örnek farklı veri kaynaklarından elde edilen veriler ile hesaplanmış alanlar oluşturulması ve tek bir grafiğe yansıtılması gibi süreçler gösterilebilir