Лучше всего, чтобы всегда начинался с 3NF, а затем учитывал денормализацию только в случае обнаружения конкретной проблемы с производительностью.
Производительность составляет всего один отпроблемы, с которыми вам приходится иметь дело с базами данных.Дублируя данные, вы рискуете допустить несогласованность данных в вашей базе данных, что сводит на нет один из основных принципов реляционных баз данных, согласованность (C
in ACID
) a .
Да, у объединений есть стоимость, от этого никуда не деться.Однако стоимость, как правило, намного меньше, чем вы думаете, и часто может быть завышена другими факторами, такими как время передачи по сети.Убедившись, что соответствующие столбцы проиндексированы должным образом, вы можете избежать многих из этих затрат.
И помните мантру оптимизации: измеряйте, не угадывайте! И измеряйте в производствесредаИ периодически * измеряйте (и настраивайте) - оптимизация - это всего лишь операция установки и забывания, если ваша схема и данные никогда не изменяются (очень маловероятно).
a) Обращение к производительности обычно можно сделать безопасным, используя триггеры для поддержания согласованности.Это, конечно, замедлит ваши обновления, но может все же позволить вашим выборам работать быстрее.