Поскольку вы можете вычислить значение - довольно легко в этом случае - оно является избыточным. Вы почти никогда не должны хранить избыточные данные. Это означает, что в каждом месте, где вы обновляете либо цену, либо людей, вы должны обязательно обновлять общее. Если вы забудете сделать это хотя бы в одном месте, данные будут противоречивыми. Итак, предположим, что теперь у вас есть запись, в которой говорится, что цена = 10 долларов, люди = 3, всего = 40 долларов. Если у вас есть разные программы, отображающие информацию по-разному - разные итоги или подмножества или что-то еще - пользователь может получить разные ответы на один и тот же вопрос в зависимости от того, как он его задал. Хотя неправильно получить неправильный ответ, еще хуже иногда получить правильный ответ, а иногда и неправильный ответ, потому что тогда может быть неясно, как решить проблему. Я имею в виду, что если я вижу, что определенный клиент показывает 2 человека, когда он должен показать 3, возможно, есть какой-то экран, на который я могу перейти, переписать 2 с помощью 3, нажать сохранить или что-то еще, и это исправлено. Но если там написано: 10 раз, 2 человека = 30 долларов, куда мне его починить? Как?
Вы можете сказать, что запись обновляется только в одном месте, поэтому проблем нет. Но это сегодня. Что если завтра вы или какой-нибудь другой программист добавите новую функцию для обновления другого типа?
Я сейчас работаю над системой, которая заполнена избыточными данными. Основная информация о каждом из продуктов нашей компании хранится в таблице «пункт». Для каждой единицы в наличии у нас есть запись запаса, и вместо того, чтобы просто ссылаться на запись позиции, они копируют все данные для каждой единицы запаса. Когда товар продается, мы копируем все данные в запись о продаже. Если что-то возвращается, мы копируем все данные в возвращаемую запись. И т. Д. Для некоторых других типов записей. Это вызывает бесконечные неприятности. Однажды у нас возникла проблема, когда пользователь выполнил запрос в поисках элементов с определенными характеристиками, а в список попаданий были включены элементы, которые не соответствовали критериям поиска. Зачем? Поскольку запрос находит все записи изделия, которые соответствуют критериям поиска, он пытается сопоставить эти записи изделия с записями запаса по номеру детали ... но некоторые записи запаса не соответствуют записи изделия по другим критериям по различным причинам. Сейчас я работаю над устранением проблемы, при которой данные о расходах не всегда должным образом копируются из записей о запасах в записи о продажах. Я хотел бы просто перепроектировать базу данных, чтобы исключить все лишние данные, но это был бы огромный проект.
Конечно, бывают случаи, когда снижение производительности для пересчета некоторого фрагмента данных слишком велико. Например, если вам нужно прочитать тысячи записей транзакций для расчета текущего баланса, и вы регулярно хотите отображать текущий баланс, это может быть слишком большим бременем производительности, и вам лучше хранить его избыточно. Но я бы очень медленно делал подобные вещи. Убедитесь, что это действительно серьезная проблема с производительностью.
Умножать два числа вместе в записи, которую вы уже читаете? Ни за что. Я не могу представить, что это может вызвать проблемы с производительностью. Если ваш движок базы данных не может умножить два числа на крошечный процент от времени, необходимого для чтения записи, получите новый движок базы данных.