我正在开发一个销售点系统,其中:
我不清楚如何实现这一点,但这是我做的架构设计:
Recipe Table fields : id,created_at
Items Table fields : id,name,price
Association Table fields : id, Recipe_id, item_id, item_serial
我想知道是否可以根据item_id使item_serial自动增加。
PS:SQLite是使用过的SQL后端
答案 0 :(得分:1)
-- Table containing sequences for all items
CREATE TABLE serials (
item_id INTEGER PRIMARY KEY REFERENCES Items(id) ON DELETE CASCADE,
seq DEFAULT 1
);
-- Automatically add new serial entries for new items
CREATE TRIGGER serial_for_new_item AFTER INSERT ON Items
BEGIN
INSERT INTO serials VALUES (new.id);
END;
-- Automatically set serials
CREATE TRIGGER update_seq AFTER INSERT ON Association
BEGIN
UPDATE Association
SET item_serial = (
SELECT seq
FROM serials
WHERE item_id = new.item_id
)
WHERE id = new.id;
UPDATE serials SET seq = seq + 1 WHERE item_id = new.item_id;
END;
以下是它的工作原理:
serials
表格对Items
表格中的每个项目都有一行。它为您提供每个项目的序列号。它有一个外键约束,因此很难绑定到Items
表。当您从Items
删除项目时,它的serials
的序列条目也将被删除(记得在您的SQLite连接中启用了外键)。serial_for_new_item
确保当您将新项目插入Items
表格时,serials
表格中会有一个正确的初始条目。update_seq
触发器会自动为您插入Association
表的每个条目设置正确的序列号。它还会增加最近插入的项目关联的当前序列号。基本上这将自动为您完成所有事情。您不需要编写更多内容,只需在数据库中创建这些对象。
如果您已经在Items
表格中有任何条目,则必须自己填写serials
表格。