Я разрабатываю базу данных «POS» для точек продаж, используя MySQL в качестве моей СУБД.
При добавлении продуктов в базу продуктов я добавляю название продукта (например, "Coca-Cola 2.L") и код UPC, стоимость, цену, отдел, поставщика и количество.
Итак, если я получу заказ на 1000 бутылок, который обойдется мне в 1 доллар за бутылку
Затем, скажем, через 2 месяца у меня осталось всего 100 бутылок на складе «моя цена на них составляет 100 долларов». Теперь я заказал еще 5000 бутылок, но на этот раз, поскольку я заказал 5000, поставщик дает мне скидку 0,10 с каждой бутылки (т. е. стоимость каждой 0,90 доллара). Итак, стоимость моего второго заказа составляет 4500 долларов. Я хочу убедиться, что очень точно отслеживаю свою прибыль. Поэтому я хочу иметь возможность отслеживать 100 заказов, которые я купил по цене 1 доллар, отдельно по цене 1 доллар и новый заказ по цене 0,90 доллара.
То, как я в настоящее время отслеживаю стоимость каждого предмета продажи, считывая текущую стоимость из таблицы продуктов и сохраняя ее в таблице sales_transactions_items вместе с ценой продажи, идентификатором транзакции и идентификатором продукта.
Проблема, с которой я столкнулся сейчас, заключается в том, что, когда я получил бутылку 5000, я изменил эту стоимость с 1 доллара на 0,90 доллара, что увеличило мою прибыль (100 бутылок x 0,10 доллара экономии на бутылку) 100x0,10 = 10 долларов прибыли, которую я сделал. фактически не заработал. После того, как количество продано, это несоответствие возникло из-за того, что значение количества достигло 5100 бутылок, из которых 100 были куплены по 1 доллару США, а 5000 были куплены по 0,90 доллара каждая.
Мой вопрос: как мне решить эту проблему, когда я действительно могу определить, сколько мне стоил каждый предмет.
number
оставалось › -1. Кроме того, в случае двух транзакций, выполняемых в одно и то же время, мне нужно как-то сказать MySQL, чтобы заблокировать таблицу, пока транзакция не будет завершена. - person Jaylen   schedule 12.01.2015CHECK(number >= 0)
. Это более или менее стандартный SQL (концепция стандартная; мне нужно просмотреть нотацию), но я не знаю, поддерживает ли MySQL объявление и принудительное применение таких ограничений. Насчет одновременного обновления: для этого и нужны транзакции и СУБД. Если вы используете соответствующий движок (я полагаю, InnoDB для MySQL), то СУБД обрабатывает это автоматически. Вы выполняете все операции модификации для продажи в одной транзакции, а СУБД предотвращает взаимодействие транзакций друг с другом. - person Jonathan Leffler   schedule 12.01.2015