Таблица дизайна такова, что каждый товар имеет только одну "текущую" стоимость запаса
У меня есть база данных, где в одной таблице записан запас товаров. При покупке товаров требуемая сумма добавляется к запасу, а при продаже-вычитается.
Столбцы таблицы выглядят следующим образом:
Item(F.key)----Qty----Date----IsCurrent
Атрибут item является внешним ключом к таблице items. Количество показывает запас на данную дату.
IsCurrent-это логическое значение, которое указывает, является ли данный запас самым текущим.
Таким образом, в любой момент времени для любого конкретного элемента может быть только одна запись с IsCurrent, установленным в true.
Что я уже пробовал:
Я использовал индекс:
CREATE UNIQUE INDEX onlyonecurrent_index ON mycompany.stock USING btree (item COLLATE pg_catalog."default") TABLESPACE pg_default WHERE iscurrent ;
Это устраняет ограничение. Однако это означает, что вставка записей в эту таблицу-это хлопотно. Я должен найти текущий запас, очистить флаг IsCurrent и затем ввести новую запись.
Я придумал два способа исправить эту проблему. Я могу вести две таблицы, одну StockHistory и другую CurrentStock, где архивные данные будут помещены в StockHistory.
Или я могу просто удалить флаг IsCurrent и отсортировать элементы по дате, чтобы получить самую последнюю запись.
Однако мне не нравится ни один из этих подходов.
Есть ли какой-нибудь испытанный способ справиться с подобной проблемой?
PIEBALDconsult
Ну, как правило (во всяком случае, на мой взгляд), такие вещи являются областью приложения, а не схемой базы данных.
Я предпочитаю не иметь столбца "iscurrent", а использовать даты начала и окончания для применимости записи.
Оставьте конечную дату нулевой или установите ее в далекое будущее, чтобы указать "текущую".
Это значительно упрощает несколько типов запросов.
Peter Leow
Разве акции с последней датой не являются самыми актуальными? Разве вы не можете использовать для этой цели поле даты в этой таблице?
Sabyasachi Mukherjee
Я думал об этом подходе, но в один день может быть много продаж, и в этом случае последние акции могут сбить с толку.
Peter Leow
Каждая запись о запасах и продажах в таблицах базы данных должна сопровождаться соответствующими датами и временем, почему это сбивает с толку?