Bir Veritabanında Bire Çok İlişkiler

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:

Öğretmenler ve Kurslar
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:

Öğretmenler ve Kurslar
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:

Öğretmenler ve Kurslar
Öğ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:

Öğretmenler
Öğ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.

Dersler
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.