MySQL, должно ли быть создано поле для хранения вычисления реляционной таблицы?

#mysql

#mysql

Вопрос:

Я знаю, что:

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

Но как насчет вычисленного значения из реляционной таблицы? Например, сумма в заказах рассчитывается из таблицы order_products по формуле sum (цена * кол-во). Должен ли я сохранить это значение в таблице orders?

Комментарии:

1. Как правило, вы не храните производные данные, но это ваша модель, поэтому в конечном итоге это зависит от вас. Если цена изменится, тогда может иметь смысл записать цену продажи напрямую, а не пересчитывать ее из исторических данных.

2. вы можете вычислить его в любое время, используя формулу без сохранения. Но, если вы используете его регулярно, его можно сохранить. По-прежнему не рекомендуется!

3. вы бы никогда не сохранили значение, которое можно было бы вычислить из других столбцов в базе данных, это вообще неверно. Пример — значение вычисляется изначально, затем исходные значения могут быть изменены, но вычисленное значение должно оставаться неизменным.

4. Должен ли я сохранить это значение в таблице orders? Вы должны решить это только самостоятельно. Это может повысить производительность, но в экстренных ситуациях может выдавать неверные данные. Не забудьте создать служебную хранимую процедуру, которая пересчитывает значения этого столбца при обнаружении несоответствия данных или подозрении.

5. Я думаю, что это должно быть нормально для вычисления огромных данных для повышения производительности, однако это не будет хорошо для чего-то вроде order_porducts, например, я думаю, что это может быть полезно, чтобы показывать количество комментариев для нескольких сообщений, не делая несколько подсчетов миллиардами записей