Relacja jeden-do-wielu w bazie danych występuje, gdy każdy rekord w Tabeli A może mieć wiele powiązanych rekordów w Tabeli B, ale każdy rekord w Tabeli B może mieć tylko jeden odpowiadający rekord w Tabeli A. Relacja jeden do wielu w baza danych jest najczęstszym projektem relacyjnej bazy danych i jest podstawą dobrego projektu.
Zastanów się nad relacją między nauczycielem a kursami, których uczy. Nauczyciel może uczyć wielu kursów, ale kurs nie miałby takiej samej relacji z nauczycielem.
Dlatego dla każdego rekordu w tabeli Nauczycieli może być wiele rekordów w tabeli Kursy. Jest to relacja jeden do wielu: jeden nauczyciel na wiele kursów.
Dlaczego ustanowienie relacji jeden do wielu jest ważne
Aby reprezentować relację jeden-do-wielu, potrzebujesz co najmniej dwóch tabel. Zobaczmy, dlaczego.
Być może stworzyliśmy stół, w którym chcieliśmy nagrać nazwę i nauczane przedmioty. Możemy zaprojektować to tak:
Teacher_ID | Imię nauczyciela | Kierunek |
---|---|---|
Teacher_001 | Carmen | Biologia |
Teacher_002 | Veronica | Matematyka |
Teacher_003 | Jorge | język angielski |
Co się stanie, jeśli Carmen naucza dwóch lub więcej kursów? Mamy dwie opcje tego projektu. Moglibyśmy dodać to do istniejącej już płyty Carmen, tak jak poniżej:
Teacher_ID | Nauczyciel_Imię | Kierunek |
---|---|---|
Teacher_001 | Carmen | Biologia, matematyka |
Teacher_002 | Veronica | Matematyka |
Teacher_003 | Jorge | język angielski |
Powyższy projekt jest jednak nieelastyczny i może powodować problemy podczas próby wstawienia, edycji lub usunięcia danych.
Utrudnia to wyszukiwanie danych. Ten projekt narusza pierwszą zasadę normalizacji baz danych, pierwszą normalną formę (1NF), która stwierdza, że każda komórka tabeli powinna zawierać pojedynczy, dyskretny kawałek danych.
Inną alternatywą dla projektu może być po prostu dodanie drugiego rekordu dla Carmen:
Nauczyciel_ID | Nauczyciel_Imię | Kierunek |
---|---|---|
Teacher_001 | Carmen | Biologia |
Teacher_001 | Carmen | Matematyka |
Teacher_002 | Veronica | Matematyka |
Teacher_003 | Jorge | język angielski |
To przylega do 1NF, ale nadal jest kiepskim projektem bazy danych, ponieważ wprowadza redundancję i może niepotrzebnie powiększać bardzo dużą bazę danych. Co ważniejsze, dane mogą stać się niespójne. Na przykład, co jeśli zmieni się imię Carmen? Ktoś, kto pracuje z danymi, może zaktualizować swoją nazwę w jednym rekordzie i nie zaktualizuje jej w drugim rekordzie. Ten projekt narusza drugą normalną formę (2NF), która przylega do 1NF i musi także unikać zwolnień wielu rekordów, oddzielając podzbiory danych na wiele tabel i tworząc relacje między nimi.
Jak zaprojektować bazę danych z jedno do wielu relacji
Aby zaimplementować relację jeden-do-wielu w tabeli Nauczyciele i kursy, dzielimy tabele na dwie i łączymy je za pomocą klucza obcego.
Tutaj usunęliśmy kolumnę Kurs w tabeli Nauczyciele:
Nauczyciel_ID | Nauczyciel_Imię |
---|---|
Teacher_001 | Carmen |
Teacher_002 | Veronica |
Teacher_003 | Jorge |
A oto tabela kursów. Zauważ, że jego klucz obcy, Teacher_ID, łączy kurs z nauczycielem w tabeli Nauczycieli:
Identyfikator kursu | Nazwa kursu | Teacher_ID |
---|---|---|
Course_001 | Biologia | Teacher_001 |
Course_002 | Matematyka | Teacher_001 |
Course_003 | język angielski | Teacher_003 |
Rozwinęliśmy relację między tabelą Nauczyciele i Kursy, używając klucza obcego.
To mówi nam, że zarówno biologia, jak i matematyka są nauczane przez Carmen i że Jorge uczy angielskiego.
Możemy zobaczyć, w jaki sposób ten projekt pozwala uniknąć ewentualnych zwolnień, umożliwia poszczególnym nauczycielom nauczanie wielu kursów i wdraża relację jeden-do-wielu.
Bazy danych mogą również implementować relację jeden-do-jednego i relację wiele-do-wielu.