Co to jest relacja wiele do wielu?
Relacja wiele do wielu (many-to-many, M:N) występuje wtedy, gdy:
- jeden rekord z tabeli A może być powiązany z wieloma rekordami z tabeli B,
- i jednocześnie jeden rekord z tabeli B może być powiązany z wieloma rekordami z tabeli A.
Klasyczny przykład:
- uczniowie i przedmioty,
- jeden uczeń ma wiele przedmiotów,
- jeden przedmiot jest realizowany przez wielu uczniów.
Jak ją utworzyć?
W relacyjnej bazie danych nie tworzy się takiej relacji bezpośrednio między dwiema tabelami. Należy dodać trzecią tabelę pośrednią (łącznikową), która zawiera klucze obce do obu tabel.
Przykład:
- uczniowie(id_ucznia, imie, nazwisko)
- przedmioty(id_przedmiotu, nazwa)
- uczniowie_przedmioty(id_ucznia, id_przedmiotu)
Tabela uczniowie_przedmioty zapisuje, który uczeń jest powiązany z którym przedmiotem.
Przykład SQL
CREATE TABLE uczniowie (
id_ucznia INT PRIMARY KEY
);
CREATE TABLE przedmioty (
id_przedmiotu INT PRIMARY KEY
);
CREATE TABLE uczniowie_przedmioty (
id_ucznia INT,
id_przedmiotu INT,
PRIMARY KEY (id_ucznia, id_przedmiotu),
FOREIGN KEY (id_ucznia) REFERENCES uczniowie(id_ucznia),
FOREIGN KEY (id_przedmiotu) REFERENCES przedmioty(id_przedmiotu)
);
Dlaczego stosuje się tabelę pośrednią?
Bo dzięki niej:
- nie duplikuje się danych,
- zachowuje się poprawną strukturę relacyjnej bazy danych,
- można łatwo kontrolować spójność powiązań,
- da się dopisać dodatkowe informacje o relacji, np. datę zapisu, ocenę, ilość.
Najważniejsze na egzamin
Jeśli pytanie dotyczy utworzenia relacji wiele do wielu, poprawna zasada brzmi:
- tworzymy trzecią tabelę zawierającą klucze obce do obu tabel.
Nie wystarczy samo dodanie jednego klucza obcego w tabeli A lub B, bo to daje relację jeden do wielu, a nie wiele do wielu.