2012-05-08 40 views
0

我希望資源的建議能幫助我改進我開發的基於SQL的庫存管理/樣品管理系統。用於創建基於SQL的庫存/樣品管理系統的資源

我在網上看到的大多數庫存系統都適用於簡單跟蹤產品數量(例如5臺電視機)及其一般位置(例如倉庫4)。我需要一個將存儲位置視爲有限資源的系統,並使用特定的插槽來放置樣本。

樣品保存的位置通常位於具有不同級別的組織的冰櫃或冰箱中。例如,

  1. 冷凍1:10個機架=> 5個抽屜/齒條=> 100小瓶/抽屜
  2. 電冰箱1:3個貨架=> 4盒/擱板=> 20小瓶/盒
  3. 快速凍結:100小瓶
  4. 電冰箱2:4個貨架=> 10瓶/擱板

我們還存儲樣本的批次的時間和需要將它們存儲在連續的,空的小瓶中。因此,我希望獲得有關可能的算法的信息,以便在庫存系統中查找,存儲和更新順序的空白空間。

TIA

回答

0

我們最終設計使用兩個表一個非常簡單的庫存系統:containervial

container定義了存儲單元的層次結構,並被設計爲具有動態深度。這意味着我們可以創建一個冰櫃與深度爲3,和另一個用的1

CREATE TABLE container(
    id SERIAL PRIMARY KEY, 
    name VARCHAR(64) NOT NULL, 
    labels VARCHAR(128) NOT NULL, 
    slots VARCHAR(64) NOT NULL 
); 

CREATE TABLE vial(
    id SERIAL PRIMARY KEY, 
    sample_name VARCHAR(64) NOT NULL, 
    position VARCHAR(64) NOT NULL, 
    FOREIGN KEY (container) REFERENCES container(id) 
); 

例如,深度,以創建具有5架,10盒/齒條三級深度冷凍,並隨後的25瓶/箱,你會做以下幾點:

INSERT INTO container (name, labels, slots) VALUES ('Blood Freezer', 'rack,box,vial', '5,10,25'); 

當我們希望把一對夫婦瓶在冰箱:

INSERT INTO vial (sample_name, position, container) VALUES ('Patient 2345', '0,0,0', 1); 
INSERT INTO vial (sample_name, position, container) VALUES ('Patient 3456', '0,0,1', 1); 

要看到所有的小瓶在第一架:

SELECT * FROM vial WHERE position LIKE '0,%' AND container = 1; 

要找到空瓶,我們使用腳本做這樣的事情:

all_vials = [] 
all_slots = get_all_slots_for_container("Blood Freezer") 
for slots in all_slots: 
    previous_vials = all_vials[:] 
    all_vials = [] 
    if not previous_vials: 
     for i in range(slots): 
      new_vial = Vial.create_from_position_index(i) 
      all_vials.append(new_vial) 
    else: 
     for previous_vial in previous_vials: 
      for i in range(slots): 
       new_vial = Vial.create_from_previous_and_add_position_index(previous_vial, i) 
       all_vials.append(new_vial) 
filled_vials = get_filled_vials_for_container("Blood Freezer") 
return filter_out_filled_vials(all_vials, filled_vials)