Relacja wiele do wielu

Słownik kwalifikacji INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych

Opublikowano: Zaktualizowano:

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.