Hai scritto in un commento sopra:
the book "Fundamentals of Database Systems" [...] says [...] that it is recommended to use an intersection table if there are a lot of NULL values in the foreign key column (for example: if 98% of employees don't manage a department)
Quando ci sono molti valori NULL nella colonna chiave esterna, i tuoi programmi dovranno fare i conti con questa colonna prevalentemente vuota per ogni record che elaborano. La colonna occuperà probabilmente dello spazio su disco anche se nel 98% dei casi è vuota, interrogando la relazione significa interrogando quella colonna che ti dà più traffico di rete, e se stai usando un ORM che genera classi dalle tue tabelle, i tuoi programmi avrà anche bisogno di più spazio sul lato client del necessario. L'utilizzo di una tabella di intersezioni evita questo, saranno necessari solo i record di collegamento in cui la chiave esterna equivalente non sarebbe altrimenti NULL.
Contro questo, se non hai solo pochi valori NULL, diciamo che il 50% o più relazioni non sono NULL, utilizzando una tabella di intersezione si ottiene l'effetto opposto: più spazio su disco, maggiore complessità con conseguente più traffico di rete ecc. .
Quindi usare una tabella di intersezione è solo una forma di ottimizzazione, solo sensibile per un caso specifico, e soprattutto oggigiorno, dove lo spazio su disco e la memoria sono diventati meno costosi, molto meno frequentemente necessari. Si noti che "Fundamentals of Database Systems" è stato originariamente scritto più di 20 anni fa (ho trovato un riferimento alla seconda edizione del 1994), e suppongo che la raccomandazione fosse già lì in quel momento. Prima del 1994, l'ottimizzazione dello spazio era probabilmente molto più importante di oggi, dato che lo storage di massa era ancora più costoso e computer e reti erano molto più lenti di oggi.
Come nota a margine di un commento schizzinoso: la dichiarazione di cui sopra sta solo cercando di anticipare ciò che l'autore di "Fundamentals of Database Systems" aveva in mente con la sua raccomandazione, immagino stia facendo una dichiarazione generale approssimativa , valido per la maggior parte dei sistemi. In alcuni database ci sono altre possibili ottimizzazioni come "colonne sparse" che rendono l'uso di una tabella di intersezione ancora più obsoleto.
Quindi non ottenere questa raccomandazione sbagliata. Il libro non ti dice di preferire le tabelle di intersezione per le relazioni {0,1}:n
in generale, o - come hai scritto tu - che questo è il "modo corretto". Usa ottimizzazioni come questa che renderà i tuoi programmi più complicati solo quando ne avrai davvero bisogno.