У меня есть три основных таблицы для отслеживания products
, location
и logistics
между ними, которые включают в себя перемещение продуктов в различные места и из них.Я сделал еще одну таблицу balance
, чтобы сохранить окончательный баланс количества каждого продукта в соответствующих местах.
Вот схемы:
products(prod_id INTEGER PRIMARY KEY AUTOINCREMENT,
prod_name TEXT UNIQUE NOT NULL,
prod_quantity INTEGER NOT NULL,
unallocated_quantity INTEGER)
Первоначально, когда продукты добавляются, prod_quantity и unallocated_quantity имеют одинаковые значения.Затем вычитается unallocated_quantity, каждый раз, когда выделяется определенное количество соответствующего продукта.
location(loc_id INTEGER PRIMARY KEY AUTOINCREMENT,
loc_name TEXT UNIQUE NOT NULL)
logistics(trans_id INTEGER PRIMARY KEY AUTOINCREMENT,
prod_id INTEGER NOT NULL,
from_loc_id INTEGER NULL,
to_loc_id INTEGER NOT NULL,
prod_quantity INTEGER NOT NULL,
trans_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY(prod_id) REFERENCES products(prod_id),
FOREIGN KEY(from_loc_id) REFERENCES location(loc_id),
FOREIGN KEY(to_loc_id) REFERENCES location(loc_id))
balance(prod_id INTEGER NOT NULL,
loc_id INTEGER NOT NULL,
quantity INTEGER NOT NULL,
FOREIGN KEY(prod_id) REFERENCES products(prod_id),
FOREIGN KEY(loc_id) REFERENCES location(loc_id))
При каждой записи, сделанной в logistics
, я хочу, чтобы триггер обновлял значения в balance
, сохраняя тем самымСводка всех транзакций (перемещение продуктов между местоположениями)
Я подумал о триггерном решении, которое проверяет, существует ли такая же запись prod_id, loc_id
в * 1019 для каждой вставки в таблицу logistics
.* таблица, которая, если существует, будет соответствующим образом обновлена.Однако у меня нет опыта в SQLite для реализации этой идеи.