Merhabalar herkese. Yavaş yavaş SQL Server’a doğru yol alıyoruz. Bugün sizlere ilişkisel vertabanlarının her şeyi olan Primary Key(Birincil Anahtar) dan bahsetmeye çalışacağım. 

MS SQL Server Eğitimleri 1 – Veri & Veritabanı Nedir?

1. dersimizde bahsettiğim gibi ilişkisel veritabanı yöntemlerinin en kuvvetli özelliklerinden biri tekrar eden verilerin önüne geçebilmesi, verileri bir merkezde toplayıp ilişkiler sayesinde, tek bir değer ile bütün tablolardaki verilere ulaşabiliyor olması olarak söylemiştik.

Şimdi sorumuz şu yine güncel bir örnek üzerinden devam edelim. 3. derste verdiğimiz Facebook örneği üzerinden devam edeyim.

Facebook tutulan 1000 lerce belki daha fazla tablo vardır.  Verilerimiz bu tablolardan çekilir getirilir ve istediğimiz işlemler yaptırılır. Facebook arama bölümüne ismimizi yazdığımızı düşünelim. Bende kendi ismimi yazdım. Murat Bilginer yazdıktan sonra bize bu isme  yada soyisme ait yada benzer harfleri barındıran pek çok kişiyi getirir. 

 

2016-01-15-03-54-03-ekran-goruntusu

 

Peki ben direk istediğim kişiye sorunsuz bir şekilde ulaşamam mı?

Tabi ki de ulaşabiliriz.

Facebook’a kaydolurken sadece bir kere kullanılabilen ve sadece bir kişiye ait olan E-Mail adresi yada sonradan belirleyebildiğimiz bir kullanıcı adı yada Telefon numarası vardır. Bunlar sadece bir kişiye aittir ve veri tabanına bir kere girişi yapılabilir.

Ben arama bölümüne sadece bana ait olan bu kullanıcı adını girdiğimde ise bana sadece tek kayıt gösterilecektir. mrt.bilginer yazdım.

Yada Telefon numaramla arama yaptığımda yine sadece tek kayıt görüntülenecektir.

 

İşte bunun gibi veritabanın da sadece bir kullanıcıya özel ona ait olacak, bir kere daha tekrar etmesine izin verilmeyen yada tekrar etme şansı olmayan bu sütun bizim birincil anahtarımız yani primary keyimiz olur.

Primery Key sadece bir tane sütun olacak diye bir şart yoktur. Büyük verilerle uğraşılan karmaşık veri tablolarında çakışmaları önlemek için birden fazla sütunun değeri birleşip Primery Key olarak kullanılabilmektedir. Mesela CANIAS ERP sisteminde kendi veri tabanı yapılarında böyle bir kullanımı standartlaştırmıştır.

Örnekler ile Primery Key!in gerekliliğini biraz daha pekiştirelim.

bankacilik-yazilim

Veri tabanında hiç Primary Key kullanılmamış bir banka veri tabanı düşünelim. Müşteriler paralarını Hesap Numaralarını girerek çekiyor olsunlar. Az öncede bahsettiğim gibi Primary Key atanması yok kayıt anında tüm kontrol mekanizması kaydı yapan kişiye ait. Bankaya müşteri kaydı girilen 100 000 kişisiniz. Daha önce Ahmet Kale isimli birisi 12345678 hesap numarasını almıştı. Sizede bir hesap numarası ataması yapıldı 12345678 kontrolü yapan kişi gözden kaçırdı OK dedi işlemi tamamladı.

Bankaya 100 000 lirada para yatırdınız. 

Ahmet Kale bir gün sonra ATM ye gitti ve hesap numarasını girdi. Veri tabanı hesap numarasını kontrol etti ve iki kaydıda Ahmet Kale ye seçenek olarak sundu. Artık bankadaki 100 000 liranızın akıbeti Ahmet beyin insafına kaldı diyebiliriz. Bir bardak soğuk suda içmeniz çok olası. Gerçekliğe çok uygun değil ve sadece bir senaryoydu. İşte atadığımız Primary Key 1.000 000 kayıtta olsa size tekrarlayan bir verinin girilmesine izin vermicektir. Böylece paranız hep güvende olabilecektir.

Biraz daha yapısal özelliklerine bakalım.

Primary Key değerleri aynı olamaz. Buda veri tekrarının önüne geçilmesini sağlar.

Primary Key ilişkili olduğu tablolardaki verilere doğru bir şekilde ulaşmamızda bizlere kolaylık sağlar.

Her kayıt için mutlaka bir değer girilmelidir. Daha sonradan aşina olacağımız bir kavramı burada kullanayım. Primary Key değeri NOT ALLOW dur. Yani boş geçilemez ve null değer alamaz.

İlişkisel veri tabanlarında mutlaka Primary Key olmalıdır. Bunu gerçekleştirmez isek veri tabanı kullanımı mantığına ters hareket etmiş oluruz. 

Primary Key Atama Yolları

Otomatik Sayı Ataması

indir

Öyle denk geldiki bazen bir tablomuzda benzersiz olabilecek verilerin olacağı bir sütun bulunmayabilir. Böyle durumlarda bir id sütunu oluşturup  int türünde otomatik sayı almasını sağlayarak bu veritabanımız için bir Primary Key oluşturabiliriz. Bunun detaylarını SQL de örnekleri ile tekrar anlatacağım.

Burada otomatik sayı ataması yapılırken bir kaç yöntem var. Gelecek olan değer rasgele (1385153365 ,-1727810574) aralığında belirlenebildiği gibi artan bir sıra (1,2,3) şeklinde ilerlemesi sağlanabilmetedir. Rastgele değer seçildiğinde diğer değerler ile kontrolü sağlanır ve aynı değer verilmez.

Bir diğer yöntem var oda Yineleme Kimliği.  ({BD 960141 -3DDB -4A7E – 9CFB -74 A722 B1885 B} ) aralığında  hexedecimal olarak bir kimlik atamasıdır. Böyle elde edilmiş bir Primary Key değeri için sonraki aramalarda sonuç bulurken int türüne göre daha yavaş olacaktır. SQL Server’ın int yani sayısal türdeki verilere gösterdiği reaksiyon daha çabuktur. Bu veri tabanına hız kazandırmaktadır.

 

Tek Alan Birincil Anahtar 

Az öncede bahsettiğim gibi tablomuzda sadece bir kişiye ait olması muhtemel bir kolonumuz varsa bunu Primer Key yapmaktır. Bunlar Personel No, T.C Kimlik No, Hesap No, gibi değerler olabilir.

 

Birden Fazla Birincil Anahtar Ataması

indir

Bazen bir tabloda bir değerin benzersizliğini tam garanti edemediğimiz durumlar olabilir. Şöyle bir örnek verelim Öğrenciler diye bir tablomuz var. Bu tabloda öğrenci bilgilerimiz var. Birde Dersler diye bir tablomuz olsun ve derslere ait bilgiler tutulsun. Birde bu iki tablo ile ilişkili Notlar diye bir tablomuz var. Notlar tablosunda pek çok öğrenci ve ders içerebilir o yüzden Öğrenci No Primary key olmaz. Ders Kodu da olamaz. Vize Final notu gibi kolonlar zaten olamaz. Ama her ders her öğrenci için bir kez listelenebildiği için DersKodu ve Öğrenci No yu beraber Primary key olarak atayabiliriz. Genelde Çok – Çok ilişki durumlarında görülen bir durumdur. 

Böylelikle bu dersimizinde sonuna geldik umarım yararlı bir yazı olmuştur. Senaryolarım için tekrar hepsinde varsaydığımızı belirteyim. Gerçeğe uygunluğu ile ilgilenmedim. Bunun dışında eksik kalan kısımları için iletşim adreslerimden ulaşabilirsiniz.

Yazıdan fayda gördüyseniz paylaşarak başkalarının da bundan fayda görmesini sağlarsanız sevinirim.Selametle.

Kaynak: www.muratbilginer.net

 

Bir sonraki yazı için tıklayınız.


muratbilginer