【发布时间】:2019-04-01 13:02:17
【问题描述】:
我有三个主要表来跟踪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 中的值,从而保留所有交易的摘要(在位置之间移动产品)
我想到了一个触发器解决方案,它检查表logistics 上的每个插入是否在balance 表中已经存在相同的prod_id, loc_id 条目,如果存在将适当更新。但是,我没有使用 SQLite 的经验来实现这个想法。
【问题讨论】:
-
@stovfl 我已阅读文档并编写了用于更新 unallocated_quantity 值的触发器。但我似乎因为我在这里提到的问题而迷失了
标签: python sql sqlite triggers