Veritabanında tablo oluşturanların kuşkusuz ilk yaptıkları tabloya bir ID alanı ekleyip bunu primary_key özelliği eklemektir. Primary key özelliği eklenen bir sutunun alacağı tüm değerler birbirinden farklı olmalıdır. Yani ID alanında değeri 1 olan kayıt iki defa yer alamaz. Bu yazımda primary key özelliğini güvenlik boyutunda inceleyeceğim.
Bu örnekte bir okulda okuyan öğrencilerin aldıkları dersleri birden çok primary key özelliğine sahip alanlarla tutacağız. Elimizde ÖĞRENCİLER, DERSLER ve ALINAN DERSLER tablosu olacak. Bu tablolar şu şekilde:
Sadece ihtiyacım olan alanları ekledim. Resimde görüldüğü gibi ALINAN_DERSLER tablosunda OGR_NO, DERS_ID ve YARIYIL alanının üçü de primary_key olarak ayarlanmış. Normalde ALINAN_DERSLER tablosunda bir ID alanı ayarlayıp primary_key özelliği vermek varken neden üç alanı birden primary key yaptık? Cevap güvenlik ve yinelenen kayıtları önlemek.
A okulunda okumaya başladık. ilk dönem almamız gereken dersler var ve bu dersleri ders seçim zamanında öğrenci bilgi sistemimize girip seçiyoruz. Tabi Kocaeli Üniversitesinde okuyorsanız öğrenci bilgi sistemine girip dersleri seçmek sanıldığı kadar kolay olmuyor 🙂 neyse buraya kadar herşey iyi hoş güzel dersimizi seçtik gönder tuşuna bastık ve bekliyoruz. Arkada hangi işlemler oluyor? Kodumuz işlenmeye başladığında ilk olarak öğrenciyi, sonrasında dersler tablosundan alınacak dersi çekiyoruz. Bu öğrenci bu dersi daha önceden seçmiş mi diye ALINAN_DERSLER tablosuna bir sorgu çekmemiz gerekiyor ki aynı ders dönem içerisinde sistemimize iki defa eklenmesin. Oldu ki öğrenci bilgi sistemini yazan yazılımcı bir mantık hatası yaptı veya kötü niyetli biri dersi iki defa eklemek için sistemi kurcaladı. Aynı dersleri sürekli olarak tabloya eklemesi için sistemde sorgular çalışıyor. Veritabanında o öğrenciye birden fazla aynı derste kayıt oluşturtmuş olduk. Burada sistem çok fazla etkilenmez belki ama bir bankada veya kritik işlemlerde böyle bir hata çok büyük sıkıntılara yol açar. Primary_key özelliğinin de asıl amacı bir tabloda onu benzersiz kılmak değil miydi? Bizimde bir öğrenciye bir dersi o dönem içerisinde sadece bir kere vermemiz gerekiyor. 3 alana birden primary key özelliği atadığımızda tabloda o 3 alan benzersiz anahtar görevi görecektir. Buda demek oluyor ki öğrenci bilgi sisteminde bir açık olsun veya olmasın kullanıcı sistemi kurcalasın veritabanına o dönem içerisinde bir kullanıcıya aynı kayıt birden fazla sayıda eklenmeyecektir.
ALINAN_DERSLER tablosunda bu satırlar eklenmiş olsun:
Tabloya aynı değerlere sahip bir satır daha eklemeye çalıştığımızda aşağıdaki hatayı alacağız.