Вы написали в комментарии выше:
в книге «Основы систем баз данных» [...] говорится, что рекомендуется использовать таблицу пересечений, если в столбце внешнего ключа много значений NULL (например, если 98% сотрудников не заведуй отделом)
Когда в столбце внешнего ключа много значений NULL, вашим программам придется иметь дело с этим в основном пустым столбцом для каждой обрабатываемой записи. Столбец, вероятно, будет занимать некоторое дисковое пространство, хотя в 98% всех случаев он пуст, запрос отношения означает запрос этого столбца, который дает вам больше сетевого трафика, и если вы используете ORM, который генерирует ваши классы из ваших таблиц, ваших программ Также потребуется больше места на стороне клиента, чем необходимо. Использование таблицы пересечений позволяет избежать этого, будут необходимы только записи ссылок, если эквивалентный внешний ключ не будет равен NULL в противном случае.
В противоположность этому, если у вас не просто несколько значений NULL, скажем, 50% или более отношений не являются NULL, использование таблицы пересечений дает противоположный эффект - больше дискового пространства, более высокая сложность, приводящая к увеличению сетевого трафика и т. Д.
Таким образом, использование таблицы пересечений является лишь формой оптимизации, приемлемой только для конкретного случая, и особенно в наши дни, когда дисковое пространство и память стали дешевле, а это требуется гораздо реже. Обратите внимание, что «Основы систем баз данных» изначально были написаны более 20 лет назад (я нашел ссылку на второе издание 1994 года), и я полагаю, что рекомендация уже была там в то время. До 1994 года оптимизация пространства была, вероятно, гораздо важнее, чем сегодня, поскольку массовое хранилище было все еще дороже, а компьютеры и сети работали медленнее, чем сегодня.
В качестве дополнительного примечания к отрывочному комментарию: вышеприведенное утверждение просто пытается предвидеть то, что автор «Основы систем баз данных» имел в виду со своей рекомендацией, я думаю, что он делал грубое, общее утверждение, допустимое для большинства систем. В некоторых базах данных есть другие возможные оптимизации, такие как «разреженные столбцы», которые делают использование таблицы пересечений еще более устаревшим.
Так что не поймите эту рекомендацию неправильно. Книга не говорит вам, чтобы вы предпочитали таблицы пересечений для {0,1}:n
отношений в целом или - как вы писали - что это «правильный путь». Используйте такие оптимизации, которые сделают ваши программы более сложными только тогда, когда они вам действительно нужны.