Tablo A'daki her kaydın Tablo B'de birçok bağlantılı kayda sahip olması, ancak Tablo B'deki her kaydın Tablo A'da yalnızca bir karşılık gelen kaydı olabileceği bir veritabanında bire çok ilişki oluşur. Bir veritabanı en yaygın ilişkisel veritabanı tasarımıdır ve iyi tasarımın kalbinde yer alır.
Bir öğretmen ile öğrettikleri dersler arasındaki ilişkiyi düşünün. Bir öğretmen birden fazla ders verebilir, ancak ders öğretmenle aynı ilişkiyi kuramaz.
Bu nedenle, bir Öğretmenler tablosundaki her kayıt için Dersler tablosunda çok sayıda kayıt olabilir. Bu bire çok ilişkidir: bir öğretmenin birden çok kursa.
Bire-bir İlişki Kurmak Neden Önemlidir?
Bire-bir ilişkiyi temsil etmek için en az iki tabloya ihtiyacınız var. Hadi nedenini görelim.
Belki de öğretilen adı ve dersleri kaydetmek istediğimiz bir Öğretmenler tablosu oluşturduk. Bunu şöyle tasarlayabiliriz:
Teacher_ID | Öğretmen adı | kurs |
---|---|---|
Teacher_001 | Carmen | Biyoloji |
Teacher_002 | veronika | Matematik |
Teacher_003 | Jorge | ingilizce |
Ya Carmen iki veya daha fazla ders veriyorsa? Bu tasarımda iki seçeneğimiz var. Carmen'in şu anki siciline ekleyebiliriz:
Teacher_ID | Öğretmen _Name | kurs |
---|---|---|
Teacher_001 | Carmen | Biyoloji, Matematik |
Teacher_002 | veronika | Matematik |
Teacher_003 | Jorge | ingilizce |
Bununla birlikte, yukarıdaki tasarım esnek değildir ve daha sonra veri eklemek, düzenlemek veya silmek istediğinizde sorunlara yol açabilir.
Veri aramak zorlaştırır. Bu tasarım, veritabanı normalleştirmesinin ilk prensibini, İlk Normal Formu (1NF) , her bir tablo hücresinin tek, ayrı bir veri parçası içermesi gerektiğini ifade eder.
Başka bir tasarım alternatifi, Carmen için ikinci bir kayıt eklemek olabilir:
Öğretmen _ID | Öğretmen _Name | kurs |
---|---|---|
Teacher_001 | Carmen | Biyoloji |
Teacher_001 | Carmen | Matematik |
Teacher_002 | veronika | Matematik |
Teacher_003 | Jorge | ingilizce |
Bu, 1NF'ye yapışır ancak hala zayıf bir veritabanı tasarımıdır çünkü artıklık sağlar ve çok büyük bir veritabanını gereksiz yere şişirebilir. Daha da önemlisi, veriler tutarsız olabilir. Mesela, Carmen'in adı değişmişse? Verilerle çalışan biri, adını bir kayıtta güncelleyebilir ve ikinci kayıtta güncellemeyi başaramaz. Bu tasarım, 1NF'ye yapışan ve birden çok tabloya veri altkümelerini birden fazla tabloya ayırarak ve bunlar arasında bir ilişki oluşturarak çoklu kayıtların fazlalıklarından kaçınmak zorunda olan İkinci Normal Formu (2NF) ihlal eder.
Bire-Çok İlişkiler ile Bir Veritabanı Nasıl Tasarlanır?
Öğretmenler ve Kurslar tablosunda bire çok ilişki kurmak için, tabloları ikiye bölüyoruz ve yabancı bir anahtar kullanarak bağlarız .
Burada, Dersler sütununu Öğretmenler tablosunda kaldırdık:
Öğretmen _ID | Öğretmen _Name |
---|---|
Teacher_001 | Carmen |
Teacher_002 | veronika |
Teacher_003 | Jorge |
Ve işte kurslar tablosu. Yabancı anahtar olan Teacher_ID, öğretmenleri bir öğretmene Öğretmenler tablosuna bağlar.
Kurs kimliği | COURSE_NAME | Teacher_ID |
---|---|---|
Course_001 | Biyoloji | Teacher_001 |
Course_002 | Matematik | Teacher_001 |
Course_003 | ingilizce | Teacher_003 |
Yabancı bir anahtar kullanarak Öğretmenler ve Dersler tablosu arasında bir ilişki geliştirdik.
Bu bize hem Biyoloji hem de Matematik'in Carmen tarafından öğretildiğini ve Jorge'nin İngilizce öğrettiğini anlatır.
Bu tasarımın olası işten çıkarmalardan nasıl kaçınılacağını, bireysel öğretmenlerin birden fazla ders verebilmelerini ve bire-bir ilişkiyi nasıl uyguladıklarını görebiliyoruz.
Veritabanları ayrıca bire bir ilişki ve çoktan çoğa bir ilişki uygulayabilir.