Когда я только начал работать с SQL, все было в одной таблице. По общему признанию, таблица выглядела примерно так:

Большинство баз данных будет иметь немного больше данных, чем четыре столбца и пять строк. Таким образом, споры между нормализованными и денормализованными базами данных бушуют веками (я говорю о времени разработчиков). Так в чем разница?

Нормализованные базы данных включают несколько таблиц. Подобные данные организованы в одну таблицу, а другие связанные данные помещаются в другую таблицу. Вы получаете доступ к каждой части данных через связи с каждой таблицей, в основном за счет соединения таблиц. Хорошо то, что нормализация снижает избыточность и поддерживает целостность данных. Все организовано в красивые маленькие таблицы, в которых хранятся все данные, которые должны храниться вместе.

Но, как и обратная сторона Rails, нормализованные базы данных могут вызывать замедление запросов, особенно при работе с дерьмовой тонной (технический термин) данных. Вот тут-то и пригодятся денормализованные базы данных. Хотя несколько соединений доставляют удовольствие и увлекательны, они могут быстро стать сложными. Когда все находится в одной таблице, запрос не должен переходить от таблицы к таблице, чтобы найти то, что вы ищете, это уже прямо здесь. Обратной стороной является избыточность данных - небольшая жертва, которую нужно принести для увеличения скорости.

Самое приятное во всем этом то, что вам не нужно выбирать то или другое; вашу базу данных не нужно нормализовать до энной степени или полностью денормализовать в одну таблицу. Если ваши запросы выполняются слишком медленно и это из-за сложности запроса, вы можете денормализовать базу данных ровно настолько, чтобы избавиться от слишком большого количества объединений. В качестве альтернативы, если ваша база данных представляет собой гигантский беспорядок данных и вам нужна некоторая организация, можно немного организовать некоторые данные в разные таблицы и избавиться от избыточности. Базы данных могут дать вам лучшее из обоих миров с небольшим вниманием.