首页 文章

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

提问于
浏览
2

我正在设计一个跟踪小吃店的库存数据库 . 由于这将是一个人/计算机访问并需要轻松移动到另一个系统,我计划使用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 回答

  • 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

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

    jspcal建议的设计通常被称为“Bill of Materials”,是解决像复合产品这样的问题的唯一理智方式 .

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

相关问题