W bazie danych każda osoba ma dokładnie jeden paszport, a każdy paszport należy do dokładnie jednej osoby. Jaką relację należy utworzyć między tabelami osoby i paszporty?
Gdy jednemu rekordowi jednej tabeli odpowiada dokładnie jeden rekord drugiej, i odwrotnie, jest to relacja 1..1, czyli jeden-do-jednego. W tabeli paszporty umieszcza się klucz obcy wskazujący osobę, np. id_osoby, i nakłada się na niego ograniczenie UNIQUE. Bez tego ograniczenia ta sama osoba mogłaby dostać dwa paszporty.
Relację 1..1 stosuje się, gdy część danych chce się trzymać osobno: rzadko używanych, poufnych albo opcjonalnych, np. dane paszportowe, szczegóły konta czy wyniki badań lekarskich. Rozpoznajesz ją, zadając pytanie w obie strony: ile paszportów ma osoba i do ilu osób należy paszport. Dwie odpowiedzi „jeden” dają 1..1.
Typ relacji ustala się, patrząc na nią z obu stron. Relacja 1..n znaczyłaby, że jedna osoba może mieć wiele paszportów, a n..1, że wiele osób dzieli jeden paszport. Treść wyklucza obie sytuacje, bo po każdej stronie jest dokładnie jeden rekord.
Relacja n..m, czyli wiele-do-wielu, wymaga tabeli pośredniej z dwoma kluczami obcymi i dotyczy sytuacji takich jak uczniowie i przedmioty: uczeń ma wiele przedmiotów, a przedmiot wielu uczniów. Tu żadna strona nie ma wielu powiązań.
Typowa pułapka to wybór 1..n tylko dlatego, że klucz obcy stoi w jednej z tabel, tak jak w relacji jeden-do-wielu. O typie decyduje jednak ograniczenie UNIQUE na tym kluczu, które zamienia relację w 1..1.
Dlatego zawsze zadawaj pytanie w obie strony.