90  Birincil Anahtar - Primary Key

İlişkisel veri tabanların birincil anahtarlar tablo üzerindeki kayıtları biricik olarak belirlerler. Bir kayıtı biricik olarak bulmanın yararı, bu kayıtı sorgulamanın ve güncellemenin bu anahtar ile çok daha hızlı bir şekilde yapılmasıdır. Aynı şekilde tablolar arasındaki ilişkiler birincil anahtarlara bağlanan yabancı anahtarlar ile sağlanır.

Örneğin KISI ve KISI_EGITIM tablolarımız olduğunu varsayalım. Bir kişinin hangi eğitimleri aldığını KISI_EGITIM tablosunda Kisi birincil anahtarı kullanılarak yapılır.

Bundan dolayı veritabanı tasarımında birincil anahtar seçimi çok önemlidir.

Birincil anahtar seçiminde 2 farklı düşünce vardır. Bunlar Doğal Anahtar ve Sentetik Anahtardır.

İkisi arasındaki farklar, artıları ve eksileri anlatmadan önce benim sentetik anahtar taraftarı olduğumu belirteyim.

90.1 Doğal Anahtar

Doğal Anahtar taraftarları veri tabanı tasarımı yapılırken sahada zaten var olan bilgiler ile birincil anahtarın seçilmesini tavsiye ederler. Kullanıcılar zaten bu bilgilere aşina olduklarından dolayı doğal anahtarların kullanımı ve benimsenmesi çok daha kolay olacaktır. Bu anahtarların veritabanı mantığına aşina olmayan kişilere aktarılması da daha kolaydır.

Tablo Table 90.1’da plakaKodu birincil anahtar olarak seçilmiştir.

Doğal Anahtarların artısı daha öncede belirttiğim gibi zaten biliniyor olmalarıdır. Eksi olarak bu anahtarların sahada anlamı olduğundan dolayı, veritabanı şemamız saha bağımlı hale gelmiştir. Gereksinim değişimlerinde anahtarların değiştirilmesi gerekir. Örneğin Tablo Table 90.2’da TcKimlikNo’nun birincil anahtar olarak seçildiğini düşünelim. Eğer bu anahtar ilk girişte yanlış girildiyse bu anahtara bağlı olan tüm tablolarda örneğin (KISI_EGITIM,KISI_TECRUBE) Yabancı Anahtar (Foreign Key) olarak girilen bu bilginin değiştirilmesi gerekecektir.

Table 90.1: Doğal Anahtar Örnek 1 - Sehir Tablosu
SEHIR
PlakaKodu PK
SehirAdi
Table 90.2: Doğal Anahtar Örnek 2 - Kişi Tablosu
KISI
TcKimlikNo PK
Adi
Soyadi
Table 90.3: Doğal Anahtar Örnek 3 - Adres Tablosu
ADRES
AdresSatiri1 PK
AdresSatiri2 PK
ApartmanAdi PK
ApartmanNo PK
PostaKodu PK
Semt PK
SehirNo PK
UlkeNo PK

tablo Table 90.3’da biraz uç bir örnek olarak Adres tablosu verilmiştir. Adres tablosunda uygun bir doğal anahtar bulmak zordur bundan dolayı girilen tüm bilgiler birleşik - composite anahtar olarak yapılması gerekmiştir.

90.2 Sentetik Anahtar - Surrogate Key

Doğal Anahtar seçmek yerine otomatik üretilen anahtarlarda birincil anahtar olarak kullanılabilir. Yararları arasında doğal anahtarın değişmesi durumunda veritabanınındaki kayıtların bu durumdan etkilenmemesidir. İlk veri girişlerinde bilgi eksikliği durumlarındada var olan bilgiler ile kayıt yapılabilmesi, program ve sorgulardaki rahatlık sayılabilir.

Daha önce doğal anahtar’da KISI ve TcKimlikNo ile verilen örnekte eğer TcKimlikNo değişimi sadece KISI tablosunu etkileyecektir. Bu durumda saha ile uygulama arasında de-coupling sağlanacaktır.

Ama sentetik anahtar için en etkili arguman, programcılara getirdiği rahatlıktır. Uygun strateji ile kod yazımında kolaylık sağlamaktadır.

Sentetik anahtarların eksisi olarak , çoğunlukla insanlar tarafından anlaşılması daha zor olması sayılabilir. Bu durum özellikle GUID için geçerlidir.

tablo Table 90.4’da KisiKey sentetik anahtar olarak seçilmiştir. Bu tabloda TcKimlikNo üzerine bir unique index eklenerek, TcKimlikNo’nun birden fazla girilmesi engellenebilir.

Table 90.4: Sentetik Anahtar Örnek - Kişi Tablosu
KISI
KisiKey PK
TcKimlikNo
Adi
Soyadi

Sentetik anahtar konusunda dikkat edilmesi gereken noktalardan biri bu anahtarla iş anlamı (business meaning) eklenmemesi gerektiğidir. Örneğin şirketlere ticaret odaları tarafından verilen oda numaraları genellikle, veritabanları tarafından üretilen bir sentetik anahtardır. Ama burada bunlara iş anlamı yüklenmiş durumdadır.

Bu konuya örnek şekil Figure 90.1 bu duruma bir örnek olarak görülebilir. Bu örnek ticaret odası yazılımlarının eski bir versiyonundan alınmıştır. Bu durumun ne kadar doğru ne kadar yanlış olduğu tartışma konusudur.

Figure 90.1

Her ne kadar Sentetik Anahtar - Doğal Anahtar tartışması bazı yerlerde dinsel bir tartışmaya dönüşsede uygulamanız için en uygun strateyi seçmeye çalışınız. Unutmayınız veritabanı tasarımında tek bir doğru hiç bir zaman yoktur.

90.3 otomatik numara alma (identity)

TODO

90.4 Sekanslar - Sequences

Sentetik anahtar veritabanı tarafında veya veritabanına ulaşan uygulama tarafında üretilebilir. Veritabanı tarafında en çok tercih edilen sentetik anahtar biçimi otomatik sayı üretimidir. Auto Number denilen bu strateji bir çok veri tabanı tarafından desteklenmektedir, Ms SQL Server,MySQL, IBM DB2 ..

Auto Number veya IDENTITY kolonları veritabanı tablosuna bağlanırlar ve her Insert cümlesi çalıştığında bir sonraki değeri otamatikman üretirler.