Napisałeś w komentarzu powyżej:
książka „Podstawy systemów baz danych” [...] mówi [...], że zaleca się stosowanie tabeli przecięć, jeśli w kolumnie klucza obcego jest dużo wartości NULL (na przykład: jeśli 98% pracowników nie zarządzaj działem)
Gdy w kolumnie klucza obcego znajduje się wiele wartości NULL, twoje programy będą musiały poradzić sobie z tą w większości pustą kolumną dla każdego przetwarzanego rekordu. Kolumna prawdopodobnie zajmie trochę miejsca na dysku, mimo że w 98% wszystkich przypadków jest pusta, zapytanie o relację oznacza zapytanie do kolumny, która zapewnia większy ruch w sieci, a jeśli używasz ORM, który generuje klasy z twoich tabel, twoje programy będzie również potrzebował więcej miejsca po stronie klienta niż to konieczne. Użycie tabeli skrzyżowań pozwala uniknąć tego, będą potrzebne tylko rekordy odsyłaczy, jeśli w przeciwnym razie równoważny klucz obcy nie byłby NULL.
W przeciwieństwie do tego, jeśli nie masz tylko kilku wartości NULL, powiedzmy, że 50% lub więcej relacji nie ma wartości NULL, użycie tabeli przecięć daje odwrotny efekt - więcej miejsca na dysku, większą złożoność powodującą większy ruch sieciowy itp.
Tak więc użycie tabeli skrzyżowań jest tylko formą optymalizacji, sensowną tylko w konkretnym przypadku, a zwłaszcza w dzisiejszych czasach, gdy miejsce na dysku i pamięć stały się tańsze, znacznie rzadziej potrzebne. Zauważ, że „Podstawy systemów baz danych” zostały pierwotnie napisane ponad 20 lat temu (odnalazłem odniesienie do drugiego wydania z 1994 r.) I myślę, że to zalecenie już tam było. Przed 1994 r. Optymalizacja przestrzeni była prawdopodobnie znacznie ważniejsza niż obecnie, ponieważ pamięć masowa była wciąż droższa, a komputery i sieci działały znacznie wolniej niż obecnie.
Na marginesie do wybrednego komentarza: powyższe stwierdzenie stara się tylko przewidzieć, co autor „Podstawy systemów baz danych” miał na myśli w swojej rekomendacji, wydaje mi się, że przedstawił szorstkie, ogólne stwierdzenie, ważne dla większości systemów. W niektórych bazach danych istnieją inne możliwe optymalizacje, takie jak „rzadkie kolumny”, które sprawiają, że korzystanie z tabeli skrzyżowań jest jeszcze bardziej przestarzałe.
Więc nie zrozum źle tej rekomendacji. Książka nie mówi ci, abyś preferował tabele przecięć dla {0,1}:n
relacji w ogóle, lub - jak pisałeś - że jest to „właściwy sposób”. Korzystaj z takich optymalizacji, które komplikują twoje programy tylko wtedy, gdy naprawdę ich potrzebujesz.