Введите общую стоимость заказа или рассчитать каждый раз?
Я создаю простой сайт электронной коммерции, и у меня есть некоторые сомнения по поводу подтверждения заказа и создания...
Это больше вопрос good practices
тогда реальный вопрос...
Должен ли я: вычислить общую стоимость заказа и вставить в базу данных, или я должен вычислять ее каждый раз, когда я читаю / делаю что-то с заказом?
Спасибо
3 ответа
Лучшие практики в области базы данных означают нормализованные данные, и хранение значений, которые могут быть вычислены, нарушает это.
Вы никогда не должны хранить вещи, которые вы можете вычислить, если вы не уверены, что между этими двумя значениями не будет расхождений.
Например, что, по вашему мнению, должно произойти, если ваш заказ состоит из двух товаров по 100 долларов, а заказ установлен на 150 долларов?
Иногда существуют основания (обычно связанные с производительностью) для хранения значений, которые можно рассчитать иным способом, но прирост производительности должен быть значительным и необходимым, а также возможность устранения несоответствия либо запланированной, либо запланированной.
Вы можете устранить эту возможность с помощью таких вещей, как триггеры или материализованные представления, или вы можете планировать их, изменяя бизнес-логику для обнаружения и устранения проблем, или другими способами.
Но обычно повышение производительности не стоит дополнительных усилий по смягчению потенциальных проблем. В конце концов, сколько заказов вы видите с миллионами отдельных предметов на них? Конечно, кроме Министерства обороны США:-)
В вашей транзакционной базе данных (т.е. основной, живой) вы не должны хранить рассчитанное значение. Суммирование дюжины строк - ничто.
Тем не менее, в вашей аналитической базе данных (также называемой бизнес-аналитикой, хранилищем данных) вы обязательно должны хранить рассчитанную сумму.
Рекомендуется не хранить значения, которые могут быть получены из существующих столбцов в таблице.
Есть много причин не делать этого, таких как
Если вы хотите обновить какой-либо из нижележащих столбцов, то вам также необходимо обновить производный столбец.
размер стола будет увеличен
и т.д.. и т.д..