Bir veri tabanında bire çok ilişki, Tablo A'daki her kaydın Tablo B'de birçok bağlantılı kaydı olabileceği, ancak Tablo B'deki her kaydın Tablo A'da yalnızca bir karşılık gelen kaydı olabileceği zaman oluşur.
Veritabanında bire çok ilişki, en yaygın ilişkisel veritabanı tasarımıdır ve iyi tasarımın merkezinde yer alır.
Veritabanları bire bir ilişki ve çoktan çoğa ilişki de uygulayabilir.
Birden Çoka İlişki Örneği
Bir öğretmen ile öğrettiği dersler arasındaki ilişkiyi düşünün. Bir öğretmen birden fazla sınıfa ders verebilir, ancak ders öğretmenle aynı ilişkiye sahip olmaz.
Bu nedenle, Öğretmenler tablosundaki her kayıt için Kurslar tablosunda birçok kayıt olabilir. Bu örnek, bire çok ilişkiyi göstermektedir: bir öğretmenden birden çok kursa.
Birden Çoka İlişkisi Neden Önemlidir
Bire çok ilişkisini temsil etmek için en az iki tabloya ihtiyacınız var. Bakalım neden.
İlk Normal Form Tasarımına Uyum
Belki de adını ve öğretilen dersleri kaydetmek istediğimiz bir tablo oluşturduk. Bunun gibi bir Öğretmenler ve Kurslar tablosu tasarlayabiliriz:
Öğretmen_Kimliği | Öğretmen_Adı | Kurs |
---|---|---|
Öğretmen_001 | Carmen | Biyoloji |
Öğretmen_002 | Veronica | Matematik |
Öğretmen_003 | Jorge | İngilizce |
Ya Carmen iki veya daha fazla ders verirse? Bu tasarımda iki seçeneğimiz var. Carmen'in mevcut kaydına şöyle ekleyebiliriz:
Öğretmen_Kimliği | Öğretmen_Name | Kurs |
---|---|---|
Öğretmen_001 | Carmen | Biyoloji, Matematik |
Öğretmen_002 | Veronica | Matematik |
Öğretmen_003 | Jorge | İngilizce |
Ancak, yukarıdaki tasarım esnek değildir ve daha sonra veri eklediğinizde, düzenlediğinizde veya sildiğinizde sorunlara neden olabilir. Veri aramayı zorlaştırır.
Bu tasarım ayrıca, her tablo hücresinin tek, ayrı bir veri parçası içermesi gerektiğini belirten veritabanı normalleştirmesinin ilk ilkesi olan İlk Normal Form (1NF) ilkesini de ihlal eder.
İkinci Normal Form Kuralı
Başka bir tasarım alternatifi, Carmen için ikinci bir kayıt eklemek olabilir:
Öğretmen_ID | Öğretmen_Name | Kurs |
---|---|---|
Öğretmen_001 | Carmen | Biyoloji |
Öğretmen_001 | Carmen | Matematik |
Öğretmen_002 | Veronica | Matematik |
Öğretmen_003 | Jorge | İngilizce |
Bu yaklaşım 1NF'ye bağlıdır ancak yine de yetersiz veritabanı tasarımıdır çünkü fazlalık getirir ve büyük bir veritabanını gereksiz yere şişirebilir. Daha da önemlisi, veriler tutarsız hale gelebilir.
Örneğin, Carmen'in adı değişirse ne olur? Verilerle çalışan biri, adını bir kayıtta güncelleyebilir ve ikinci kayıtta güncelleyemeyebilir.
Bu tasarım, 1NF'ye bağlı kalan İkinci Normal Form (2NF) standardını ihlal ediyor ve aynı zamanda birden fazla kaydın fazlalığından da kaçınması gerekiyor. 2NF kuralı bunu, verilerin alt kümelerini birden çok tabloya ayırarak ve aralarında bir ilişki oluşturarak başarır.
Birden Çoka İlişkilerle Bir Veritabanı Nasıl Tasarlanır
Öğretmenler ve Kurslar tablosunda bire çok ilişkisini uygulamak için tabloları ikiye bölün ve bir yabancı anahtar kullanarak birbirine bağlayın.
Burada, Öğretmenler tablosundaki Kurs sütununu kaldırdık:
Öğretmen_ID | Öğretmen_Name |
---|---|
Öğretmen_001 | Carmen |
Öğretmen_002 | Veronica |
Öğretmen_003 | Jorge |
Ve işte Kurslar tablosu. Yabancı anahtarının, Teacher_ID'nin, bir kursu Teachers tablosundaki bir öğretmene bağladığını unutmayın:
Kurs_Kimliği | Kurs_Adı | Öğretmen_Kimliği |
---|---|---|
Kurs_001 | Biyoloji | Öğretmen_001 |
Kurs_002 | Matematik | Öğretmen_001 |
Kurs_003 | İngilizce | Öğretmen_003 |
Öğretmenler ve Dersler tablosu arasında bir yabancı anahtar kullanarak bir ilişki geliştirdik. Bu düzenleme bize Carmen'in hem Biyoloji hem de Matematik öğrettiğini ve Jorge'nin İngilizce öğrettiğini söylüyor.
Bu tasarımın olası fazlalıkları nasıl önlediğini, bireysel öğretmenlerin birden fazla ders vermesine izin verdiğini ve bire çok ilişkisini nasıl uyguladığını görebiliriz.