2012-05-08 41 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)