Który z typów relacji wymaga utworzenia tabeli pośredniej łączącej klucze główne obu tabel?
A. n..1
B. 1..1
C. 1..n
D. n..m
Pytanie z egzaminu CKE, czerwiec 2021 (arkusz EE.09-SG-21.06).
Relacja n..m, czyli wiele do wielu, wymaga utworzenia tabeli pośredniej, bo bez niej nie da się poprawnie zapisać powiązań w relacyjnej bazie danych. Chodzi o sytuację, w której jeden rekord z pierwszej tabeli może być powiązany z wieloma rekordami z drugiej tabeli, a jednocześnie jeden rekord z drugiej tabeli może być powiązany z wieloma rekordami z pierwszej. Typowy przykład to uczniowie i kursy: jeden uczeń może chodzić na kilka kursów, a jeden kurs ma wielu uczniów. Wtedy tworzy się tabelę pośrednią, np. uczen_kurs, która zawiera klucz obcy do tabeli uczniowie oraz klucz obcy do tabeli kursy. Bardzo często te dwa pola razem tworzą klucz główny złożony, co zabezpiecza przed duplikowaniem tej samej relacji. Moim zdaniem to jeden z ważniejszych tematów przy projektowaniu baz, bo źle zrobiona relacja n..m szybko prowadzi do powtarzania danych, problemów z aktualizacją i bałaganu w zapytaniach SQL. Dobra praktyka branżowa mówi, żeby nie upychać kilku wartości w jednej kolumnie, tylko normalizować strukturę i trzymać powiązania w osobnej tabeli łączącej.
W relacjach 1..1, 1..n oraz n..1 zwykle nie tworzy się osobnej tabeli pośredniej tylko po to, aby połączyć klucze główne obu tabel. W relacji jeden do jednego najczęściej klucz obcy umieszcza się w jednej z tabel, często z ograniczeniem UNIQUE, żeby jeden rekord odpowiadał dokładnie jednemu rekordowi po drugiej stronie. Przykładem może być tabela użytkownicy i tabela profile_uzytkownikow, gdzie jeden użytkownik ma jeden profil. Da się to obsłużyć bez dodatkowej tabeli łączącej, o ile nie ma innych powodów projektowych, np. wydzielenia rzadko używanych danych. W relacji jeden do wielu klucz obcy trafia do tabeli po stronie wiele. Jeśli jeden autor może mieć wiele książek, to tabela ksiazki zawiera id_autora jako klucz obcy. Relacja n..1 jest w praktyce tym samym układem widzianym z drugiej strony, więc również nie wymaga tabeli pośredniej. Częsty błąd myślowy polega na tym, że ktoś widzi dwa klucze i od razu zakłada potrzebę dodatkowej tabeli. To nie zawsze jest prawda. Tabela pośrednia jest potrzebna dopiero wtedy, gdy wiele rekordów z jednej tabeli może łączyć się z wieloma rekordami z drugiej, czyli w relacji n..m. Wtedy taka tabela nie jest ozdobą, tylko normalnym elementem modelu relacyjnego, zgodnym z zasadami normalizacji i integralności referencyjnej.