Денормализация ради производительности не плохая вещь. Необходимо учитывать цели вашего приложения / базы данных и то, как нормализация может помочь вам в их достижении.
Прежде всего, помещение таблицы в 1NF предполагает устранение избыточных данных или (Coronel, Rob 2009) «повторяющихся групп». Удаление данных из нескольких мест (будь то в других таблицах или строках) - это хорошая вещь, которая помогает в обслуживании, сохранности данных и производительности.
Переход на 2NF предполагает устранение частичных зависимостей. Частичные зависимости существуют, когда у вас есть составной ключ (первичный ключ, состоящий из нескольких полей ключа) и полей, значение которых определяется только одним или частью ключа. Как правило, устранение частичных зависимостей - это то место, где вы начинаете видеть таблицы мостов, созданные для обработки отношений «многие ко многим».
3NF - это шаг вперед, поскольку он устраняет все транзитивные зависимости или поля, которые зависят от значения неключевых полей. Этот шаг часто обсуждается во имя исполнения. В зависимости от размера или дисперсии значений переходных полей вам нужно будет взвесить трудности, связанные с сохранением этих значений в таблице, а не с тем, как часто вам потребуется JOIN для его получения.
Итог, устранение избыточных данных и зависимых данных (частичных и транзитивных) - это хорошо. Но не позволяйте этому мешать вам делать то, что имеет смысл для вашего приложения.
C. Коронель, П. Роб (2009), «Системы баз данных: реализация и управление проектами», курс «Технология», Бостон, Массачусетс (гл. 5)