2014-10-07 40 views
0

我正在開發銷售系統的一個點的情況下對列自動遞增,其中:有另一列

  1. 用戶可以添加的會被出售的物品。
  2. 每個銷售操作產生記憶售出一件商品
  3. 應用,使每一個銷售的產品,通過一個每個產品銷售時間增加一個序列號的配方。
    如:我賣產品A&B,左右各一的他們獲得串行1。然後我賣的產品再次,所以它必須得到串行2,而B的序列號仍爲1

我有沒有明確的想法如何實現這一點,但這是架構設計我做:

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後端

回答

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表。