Это вопрос не совсем о «программировании» (не относится к какому-либо языку или базе данных), а скорее о дизайне и архитектуре. Это тоже вопрос типа "Как лучше сделать Х". Надеюсь, не вызывает особых «религиозных» споров.
В прошлом я разрабатывал системы, которые тем или иным образом вели инвентаризацию предметов (неважно, какие предметы). Некоторые используют языки/БД, которые не поддерживают транзакции. В таких случаях я решил не сохранять количество товара в наличии в поле записи товара. Вместо этого количество в наличии рассчитывается как сумма полученных запасов — всего проданных запасов. Это привело к почти полному отсутствию расхождений в инвентаризации из-за программного обеспечения. Таблицы правильно проиндексированы, и производительность хорошая. Существует процесс архивирования на случай, если количество записей начнет влиять на производительность.
Итак, несколько лет назад я начал работать в этой компании, и мне досталась в наследство система учета запасов. Но количество сохраняется в поле. Когда запись зарегистрирована, полученное количество добавляется в поле количества для товара. Когда товар продается, количество вычитается. Это привело к расхождениям. На мой взгляд, это неправильный подход, но предыдущие программисты здесь клянутся им.
Я хотел бы знать, есть ли консенсус относительно того, как правильно разработать такую систему. Также какие ресурсы доступны, печатные или онлайн, чтобы получить рекомендации по этому вопросу.
Спасибо