数据库设计(库存数据库)

时间:2011-07-07 21:48:02

标签: database sqlite database-design

我正在设计一个跟踪小吃店的库存数据库。由于这将是一个人/计算机访问并需要轻松移动到另一个系统,我计划使用SQLite作为数据库引擎。基本概念是跟踪从诸如Sams Club等批发仓库购买的库存,然后跟踪库存。

我要克服的主要障碍是如何跟踪产品数据库中的批量与单个项目。例如,如果购买了批量商品,让我们说24包可乐,我如何在产品数据库中维护,批量商品以及它包含24个单独的商品。如果所有批量商品只包含多个1件商品,那么解决方案将相当容易,但在各种包装中,例如包含5个不同单独商品的芯片纸箱,所有商品都有单独的UPC,解决方案变得有点困难。

到目前为止,我已经提出了多次传递方法,其中DB将被多次扫描以获取所有信息。

Product_Table
SKU: INT
Name: TEXT
Brand: TEXT
PurchasePrice: REAL
UPC: BIGINT
DESC: TEXT
BULK: BOOLEAN
BulkList: TEXT // comma separated list of SKUs for each individual item
BulkQty: TEXT // comma separated list corresponding to each SKU above representing the quantity

Transaction_Table
SKU: INT
Qty: INT
// Other stuff but that is the essential

当我向库存添加批量商品(正数量交易)时,它应该添加所有商品的个别商品,因为我无法想到我会在库存中出售批量商品。我想将大量项目保留在数据库中,以帮助接收并将它们添加到清单中。

2 个答案:

答案 0 :(得分:2)

一种方法是在批量对象及其内容之间创建1:N映射:

create table bulk_item (
  bulk_product_id integer not null,
  item_product_id integer not null,
  qty integer not null,
  primary key(bulk_product_id, item_product_id),
  foreign key(bulk_product_id) references product(sku),
  foreign key(item_product_id) references product(sku)
);

以逗号分隔的列表当然没问题(这可能会使查找某些查询变得更加困难,例如查找包含此SKU等的所有批量对象...)。

答案 1 :(得分:1)

我必须同意并不同意jspcal。我同意“bulk_item”表,但我不会说使用逗号分隔列表是“很好”。我怀疑他们只是礼貌而且不会支持不是第一次正常形式的设计。

jspcal建议的设计通常称为“Bill of Materials”,是处理复合产品等问题的唯一理智方式。

为了有效地将其与您的交易表一起使用,您应该包括交易类型代码以及SKU和数量。任何给定SKU中的库存可能上升或下降的原因不同。最常见的是接收新股票和购买股票的客户。但是,还有其他一些事项,例如手动库存调整,以考虑文书错误和收缩。还有股票转换,例如当您决定将各种包装破碎成单个产品进行销售时。不要认为您可以依靠数量是正数还是负数来为您提供足够的信息,以便能够了解您的库存水平以及它们如何(以及为什么)发生变化。