Вычисляем столбец для простого умножения? - PullRequest
0 голосов
/ 17 января 2011

Я делаю простое приложение для инвентаризации. В таблице есть столбцы Количество, Цена и Общая цена. Что лучше, сделать TotalPrice Computed Column как Количество * Цена или сделать этот расчет в моем приложении и сохранить его в TotalPrice?

Ответы [ 3 ]

2 голосов
/ 17 января 2011

Одно правило в дизайне базы данных (в общем): не хранить информацию, которую также можно легко получить.

В вашем случае я бы не создавал вычисляемый столбец, а делал бы умножение во время поиска. Либо путем прямого выбора price * quantity, либо путем создания представления, содержащего это вычисление.

Представление имеет дополнительное преимущество, заключающееся в том, что вы можете легко изменить формулу (например, с учетом НДС) без необходимости изменения всех утверждений в вашем приложении.

1 голос
/ 17 января 2011

Если вы обновляете цену или количество, вы вынуждены сделать обновление 2cd на TotalPrice. Что если другой разработчик забудет об обновлении 2cd? Теперь у вас плохие данные.

У вас может быть триггер для синхронизации, но вероятность плохих данных все еще существует. В некоторых RDMS триггеры не запускаются для каждой строки, обновляемой в обновлении на основе набора.

Но иногда это необходимо для хранения вычисляемых полей. Если таблица БОЛЬШАЯ и вы планируете поиск в вычисляемом поле. (Вы должны хранить данные, чтобы проиндексировать их). В некоторых проектах вы сохраняете не только рассчитанные поля, но и совокупные вычисления.

Хранить вычисленные поля не всегда неправильно, просто убедитесь, что вы знаете компромиссы.

* РЕДАКТИРОВАТЬ * Еще один момент. Если вы рассчитываете «Amount_Paid», фактическая сумма, уплаченная клиентом, будет потеряна при изменении формулы расчета.

Дизайн для решения проблемы. Если это означает нарушение правила большого пальца, то сломайте некоторые большие пальцы. * КОНЕЦ РЕДАКТИРОВАНИЯ *

0 голосов
/ 17 января 2011

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

SELECT (Quantity * Price) as TotalPrice FROM my_table
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...