Bir tablo başka bir tablonun birincil anahtarına başvuran bir yabancı anahtar kullandığında, iki veritabanı tablosu arasında bir ilişki kurulur. İlişkisel veritabanı teriminin arkasındaki temel kavram budur.
Bir Yabancı Anahtar İlişki Kurmak İçin Nasıl Çalışır
Birincil anahtar, tablodaki her kaydı benzersiz şekilde tanımlar. Genellikle bir tablodaki ilk sütun olan ve benzersiz olduğundan emin olmak için veritabanı tarafından otomatik olarak oluşturulabilen bir aday anahtar türüdür. Yabancı anahtar, bir kaydı başka bir tablodaki verilere bağlamak için kullanılan başka bir aday anahtardır (birincil anahtar değil).
Örneğin, hangi öğretmenin hangi dersi verdiğini belirten bu iki tabloyu ele alalım. Burada, Courses tablosunun birincil anahtarı Course_ID'dir. Yabancı anahtarı Teacher_ID:
Kurs_Kimliği | Kurs_Adı | Öğretmen_Kimliği |
---|---|---|
Kurs_001 | Biyoloji | Öğretmen_001 |
Kurs_002 | Matematik | Öğretmen_002 |
Kurs_003 | İngilizce | Öğretmen_003 |
Kurslar'daki yabancı anahtarın, Öğretmenler'deki birincil anahtarla eşleştiğini görebilirsiniz:
Öğretmen_Kimliği | Öğretmen_Adı |
---|---|
Öğretmen_001 | Carmen |
Öğretmen_002 | Veronica |
Öğretmen_003 | Jorge |
Teacher_ID yabancı anahtarının Courses ve Teachers tabloları arasında bir ilişki kurulmasına yardımcı olduğunu söyleyebiliriz.
Veritabanı İlişkisi Türleri
Yabancı anahtarları veya diğer aday anahtarları kullanarak tablolar arasında üç tür ilişki uygulayabilirsiniz:
Bire Bir
Bu tür bir ilişki, ilişkinin her iki tarafında yalnızca bir kayda izin verir. Birincil anahtar, başka bir tablodaki yalnızca bir kayıtla (veya hiçbiriyle) ilgilidir. Örneğin, bir evlilikte, her eşin yalnızca bir başka eşi vardır. Bu tür bir ilişki tek bir tabloda uygulanabilir ve bu nedenle yabancı anahtar kullanmaz.
Birden Çoka
Birden çoğa ilişki, bir tablodaki tek bir kaydın başka bir tablodaki birden çok kayıtla ilişkilendirilmesine olanak tanır. Müşteriler ve Siparişler tabloları olan bir veritabanına sahip bir işletme düşünün.
Tek bir müşteri birden fazla sipariş satın alabilir, ancak tek bir sipariş birden fazla müşteriye bağlanamaz. Bu nedenle Siparişler tablosu, Müşteriler tablosunun birincil anahtarıyla eşleşen bir yabancı anahtar içerirken, Müşteriler tablosunda Siparişler tablosunu gösteren yabancı bir anahtar bulunmaz.
Çoktan Çoka
Bu, bir tablodaki birçok kaydın başka bir tablodaki birçok kayda bağlanabildiği karmaşık bir ilişkidir. Örneğin, işletmemizin büyük olasılıkla Müşteriler ve Siparişler tablolarına ve muhtemelen bir Ürünler tablosuna da ihtiyacı vardır.
Yine, Müşteriler ve Siparişler tablosu arasındaki ilişki bire çoktur, ancak Siparişler ve Ürünler tablosu arasındaki ilişkiyi göz önünde bulundurun. Bir sipariş birden fazla ürün içerebilir ve birkaç müşteri aynı ürünlerden bazılarını içeren bir sipariş gönderebileceğinden bir ürün birden çok siparişe bağlanabilir. Bu tür bir ilişki en az üç tablo gerektirir.
Veritabanı İlişkileri Neden Önemlidir?
Veritabanı tabloları arasında tutarlı ilişkiler kurmak, veri bütünlüğünün sağlanmasına yardımcı olarak veritabanı normalleşmesine katkıda bulunur. Örneğin, yabancı bir anahtar aracılığıyla herhangi bir tabloyu bağlamasaydık ve bunun yerine Kurslar ve Öğretmenler tablolarındaki verileri şu şekilde birleştirseydik:
Öğretmen_Kimliği | Öğretmen_Adı | Kurs |
---|---|---|
Öğretmen_001 | Carmen | Biyoloji, Matematik |
Öğretmen_002 | Veronica | Matematik |
Öğretmen_003 | Jorge | İngilizce |
Bu tasarım esnek değildir ve her tablo hücresinin tek, ayrı bir veri parçası içermesi gerektiğini belirten veritabanı normalleştirmesinin ilk ilkesi olan İlk Normal Form'u ihlal eder.
Ya da belki 1NF'yi uygulamak için Carmen için ikinci bir kayıt eklemeye karar verdik:
Öğretmen_Kimliği | Öğretmen_Adı | Kurs |
---|---|---|
Öğretmen_001 | Carmen | Biyoloji |
Öğretmen_001 | Carmen | Matematik |
Öğretmen_002 | Veronica | Matematik |
Öğretmen_003 | Jorge | İngilizce |
Bu hala zayıf bir tasarımdır, gereksiz yinelemelere ve veri ekleme anormallikleri olarak adlandırılanlara yol açar, bu da tutarsız verilere katkıda bulunabileceği anlamına gelir. Örneğin, bir öğretmenin birden fazla kaydı varsa, bazı verilerin düzenlenmesi gerekiyorsa, ancak veri düzenlemeyi yapan kişi birden fazla kaydın olduğunu fark etmezse ne olur? Ardından tablo, tanımlamanın veya bundan kaçınmanın açık bir yolu olmaksızın aynı kişi için farklı veriler içerecektir.
Bu tabloyu Öğretmenler ve Kurslar olmak üzere iki tabloya ayırmak, veriler arasında doğru ilişkiyi oluşturur ve bu nedenle veri tutarlılığı ve doğruluğunun sağlanmasına yardımcı olur.