Конечно, базы данных должны быть нормализованы, поскольку они работают лучше, SQL был разработан для нормализованных структур и для их объединения.Нет оснований для «нормализации».
Однако есть один случай, в котором есть исключительная необходимость.Таблицы истории или Журнал Фая.Вопрос, который необходимо рассмотреть, заключается в том, что при запросе этой таблицы вам нужны текущие данные из родительского объекта;или это истинный журнал того, что произошло в то время, и вам нужны данные, которые были текущими на момент создания строки журнала.
В последнем случае, поскольку существует явная цель хранения такогоданные, это на самом деле не дубликат, это не аннулирование нормализации;поэтому неправильно классифицировать данные как дубликаты или "денормализованные".Это просто данные аудита, которые необходимо сохранить.Обычно файлы журнала (это то, чем они на самом деле являются; для удобства мы храним их в базе данных) не являются частью базы данных, и правила базы данных не применяются.
Но всегда применяйте к ним индексы и регулярно очищайте их;в противном случае превращайтесь в монстров.
Альтернативой файлам журнала являются таблицы истории.Вместо того, чтобы регистрировать файл для действий, он реализуется по мере необходимости.Для каждой таблицы, для которой должен быть сохранен Аудит изменений, реализуется «копия» таблицы.Это сохраняет предыдущее изображение строк, которые были изменены.DDL в точности совпадает с исходной таблицей, плюс один элемент: для PK добавлен столбец TIMESTAMP или DATETIME.Там также это явное требование, и было бы неправильно классифицировать эти таблицы как дубликаты или "ненормализованные".
Таблицы истории превосходят файлы журнала, потому что они хранят только строки, которые были изменены;тогда как файлы журнала хранят неизменяемые данные повторно.Результирующие объемы хранимых данных весьма различны.
▶ Пример таблиц истории ◀