Bu başlıkta sizlere uzun zamandır (yaklaşık 3 yıl) taslakta kalan veri tabanında anahtarlardan bahsedeceğim. Hepiniz az çok bir şeyler biliyorsunuzdur ama okumaya devam edin, eminim bilmediğiniz birkaç şey çıkacak, bazılarınız ise akıllarındaki sorulara cevap bulacak.
Yazıda örnek olması için bir tane tablomuz olsun;
Öğrenci ( TCNO, Ad, Soyad, Şehir, Doğum Tarihi, Cep Telefonu Numarası)
burada virgülle ayrılan her kelime bir sütunu temsil ediyor.
Primary Key (Birincil Anahtar): Bu anahtar çeşidi, bir tablodaki bir satırı diğerlerinden ayırabilecek güçte olan bir anahtardır.
- Primary key bir sütun veya birkaç sütundan oluşabilir. (Birkaç sütundan oluşabilmesi için hiçbir sütunun tek başına o satırı(kaydı) diğerlerinden ayıramıyor olması gerekir.)
- Primary key hiçbir şüpheye yer bırakmadan o satır için benzersiz (unique) olmalıdır.
Bu tablodaki her kaydı birbirinden ayırmak için yani ingilizce tabirle "uniquely identify" etmek için bir sütun seçmemiz gerekli.
- TCNO primary key olabilir, çünkü her bir kaydın (öğrencinin) TCNOları kesinlikle farklıdır.
- Cep telefonu numarası primary key olabilir, çünkü her kaydın ( öğrencinin) cep telefonu numarası kesinlikle farklıdır.
Bu tabloda diğer sütunlar bir satırı (öğrenciyi) diğerlerinden ayıramaz yani diğer satırlarda da aynı değerler olabilir. Örneğin "Şehir" sütunundan gidersek, birden fazla öğrenci aynı şehirden geliyor olabilir.
Not: Eğer herbir öğrencinin farklı şehirlerden geldiğine ve geleceğine eminsek o zaman "Şehir" sütununu primary key yapabiliriz çünkü o zaman Zonguldak şehrinden gelen öğrenciyi bulmak istersek bize sadece 1 tane satır (öğrenci) gelecek.
Candidate Key (Aday Anahtar): Candidate key demek primary key olabilecek bir key demektir.
Primary key özelliğini sağlayan sütün veya sütunların oluşturduğu küme candidate key kümesidir.
Primary key özelliğini sağlayan sütün veya sütunların oluşturduğu küme candidate key kümesidir.
- Candidate key bir sütun veya birkaç sütundan oluşabilir. (Birkaç sütundan oluşabilmesi için hiçbir sütunun tek başına o satırı(kaydı) diğerlerinden ayıramıyor olması gerekir.)
- Candidate key hiçbir şüpheye yer bırakmadan o satır için benzersiz (unique) olmalıdır.
Yukarıdaki tablodaki candidate keyler ise şunlardır;
- TCNO
- Cep Telefonu Numarası
Primary key, candidate keyler arasından seçilmiş bir keydir. Burada istersek TCNO yu primary key yapabiliriz, istersek de cep telefonu numarasını. Seçim bize kalmış.
(Küme içindeki her bir yıldız bir primary key i temsil etmekte)
Super Key (Süper Anahtar): Bu anahtar çeşidi de bir satırı diğer satırdan ayırır. Herbir primary key ve candidate key bir super keydir.
Gördüğünüz gibi super key kümesi candidate kümesini kapsıyor. Yani her primary key, candidate key birer super keydir.
Gördüğünüz gibi super key kümesi candidate kümesini kapsıyor. Yani her primary key, candidate key birer super keydir.
Yukarıdaki tablodaki kayıtları ayırmak için primary key kullanmıştık. Tanım olarak primary key en az sütunla kayıtları ayırması gerekir (tercihen bir sütun, eğer bir sütun ayırmaya yetmiyorsa birden fazla sütun kullanabiliriz) Peki ya birden fazla sütunla da bu kayıtları ayıramaz mıyız?
Örneğin bir satırı TCNO ile ayırabiliyoruz peki TCNO ve Ad sütunlarını da kullanamaz mıyız? Elbette kullanabiliriz, zaten TCNO tek başına yeterken bir de Ad filtresi ekliyoruz.
Bu şekilde oluşturabileceğimiz kümeler birer super keydir.
Kümenin birkaç elamanı şöyle; { (TCNO), (TCNO,Ad), (TCNO, Soyad), (TCNO, Şehir), (TCNO, Doğum Tarihi), (TCNO, Cep Telefonu Numarası), (TCNO, Ad, Soyad), (TCNO, Ad, Şehir) .......}
Gördüğünüz gibi bir satırı(öğrenciyi) ayırabilecek tüm kombinasyonlar kümesi super key kümesi oldu.
Kısaca özetlemek gerekirse bir satırı ayırabilen tüm anahtarların birleşimi super key kümesi ve bu kümenin her bir elamanı super keydir.
Peki, her şey güzel, super key nedir ve super key kümesini nasıl oluşturacağımızı artık biliyoruz. Ya candidate key kümesi? Candidate key kümesini oluştururken içine koyacağımız elemanların gerçekten candidate key olup olmadığını nasıl anlarız?
Çok basit, bunun için candidate key elemanının alt kümesi var mı ve varsa bu küme super key kümesinin içinde var mı buna bakarız. Eğer varsa o bir candidate key değildir.
Umarım yazım size faydalı olmuştur, herhangi bir sorunuz veya yazıda düzeltmemi istediğiniz bir yer varsa çekinmeden yazabilirsiniz.
Peki, her şey güzel, super key nedir ve super key kümesini nasıl oluşturacağımızı artık biliyoruz. Ya candidate key kümesi? Candidate key kümesini oluştururken içine koyacağımız elemanların gerçekten candidate key olup olmadığını nasıl anlarız?
Çok basit, bunun için candidate key elemanının alt kümesi var mı ve varsa bu küme super key kümesinin içinde var mı buna bakarız. Eğer varsa o bir candidate key değildir.
Umarım yazım size faydalı olmuştur, herhangi bir sorunuz veya yazıda düzeltmemi istediğiniz bir yer varsa çekinmeden yazabilirsiniz.