SQLite Trigger: обновление таблицы после вставки на другом - PullRequest
0 голосов
/ 28 октября 2018

У меня есть три основных таблицы для отслеживания 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 для реализации этой идеи.

1 Ответ

0 голосов
/ 29 октября 2018

Я полагаю, что ваш TRIGGER будет иметь вид: баланс таблица с использованием PRIMARY KEY (prod_id,loc_id) или поочередно UNIQUE (prod_id,loc_id).УНИКАЛЬНОЕ ограничение, вероятно, в любом случае будет требоваться / хотеться.

Тонкое отличие состоит в том, что второе будет ВСТАВИТЬ строку баланса, если и соответствующая строка не существует.Последний ничего не сделал бы, если бы соответствующая строка баланса не существовала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...