Re: [pgsql-ru-general] Остатки товара.
От | Виктор Вислобоков |
---|---|
Тема | Re: [pgsql-ru-general] Остатки товара. |
Дата | |
Msg-id | CAM6AoWYOpd_GjmyH6ne3Wj=yL1b0ktNfyxAJq+kTGaOROZE0YQ@mail.gmail.com обсуждение исходный текст |
Ответ на | Остатки товара. ("vlads" <vlads@ngs.ru>) |
Список | pgsql-ru-general |
Вариантов несколько. Многое зависит от количества товаров. Если каталог небольшой можно использовать триггеры, если в нём сотни тысяч или миллионы позиций, а также частое обновление, триггеры могут оказаться нерациональными. В этом случае, возможно лучшим решением будет периодический запуск процедуры, которая будет обсчитывать и сохранять остатки. Можно и вообще без триггеров обойтись и всю логику с подсчётами остатков выполнять прямо в вмомент внесения изменений в количество товара. Т.е. запрашивать по другим таблицам остаток, менять его и сохранять. Всё зависит от размера каталога. Чтобы не было проблем с несколькими пользователями - используйте транзакции, для этого они собственно и предназначены. 25 апреля 2012 г. 4:59 пользователь vlads <vlads@ngs.ru> написал: > Допустим, есть справочник товаров (tovar) с двумя полями > x(Serial) и name(text) > т.е. код товара и его наименование. > А также справочник складов (sklad) с аналогичными полями: > x(Serial) и name(text) > Третий справочник: справочник операций прихода/расхода (oper): > x(Serial), dat(data), xtovar(int), xsklad(int) и kol(int) > где поле kol - это кол-во прихода или расхода (штук) товара > dat - дата операции. > а xtovar и xsklad - ссылки на коды товара и склада. > Задача такова. При добавлении строки oper система должна автоматически в > каком-нибудь третьем справочнике хранить актуальные остатки товара: > справочник остатков (ost) > x(Serial), xtovar(int), xsklad(int) и kol(int). > > Проблема, с которой я к Вам обращаюсь: Как я понимаю - это работа с > триггерами. Алгоритм такой: > - Триггер должен сначала понять, есть ли вообще строка в справочнике ost > (xtovar-xsklad) и если её нету - создать новую с нулевой суммой. > - Ну и в существующую или в созданную новую строку добавить/отнять > необходимую сумму товара. > > Вопросов несколько: > 1) Если это делают несколько пользователей - не случится ли так что два > пользователя одновременно не найдут пару (xtovar-xsklad) и создадут каждый > свою такую пару. И получится дубляж строк. Как этого избежать. > 2) Как понять триггеру, что нужной строки с уникальной парой (xtovar-xsklad) > нет, чтобы он создал. > 3) Может кто то какой то другой вариант решения проблемы. > > Заранее спасибо. > > -- > Sent via pgsql-ru-general mailing list (pgsql-ru-general@postgresql.org) > To make changes to your subscription: > http://www.postgresql.org/mailpref/pgsql-ru-general
В списке pgsql-ru-general по дате отправления: