Ağustos 11, 2023
Okuma süresi: 5 dakika
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 (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 (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;
NULL
kullanıma izin verilmez. Ancak, benzersiz anahtarlarda NULL
kayıtlara izin verilir.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