我正在设计一个跟踪小吃店的库存数据库 . 由于这将是一个人/计算机访问并需要轻松移动到另一个系统,我计划使用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 回答
一种方法是在批量对象及其内容之间创建1:N映射:
以逗号分隔的列表当然没问题(这可能会使查找某些查询变得更加困难,例如查找包含此SKU的所有批量对象等) .
我必须同意并不同意jspcal . 我同意“bulk_item”表,但我不会说使用逗号分隔列表是“很好” . 我怀疑他们只是礼貌而且不会支持不是第一次正常形式的设计 .
jspcal建议的设计通常被称为“Bill of Materials”,是解决像复合产品这样的问题的唯一理智方式 .
为了有效地将其与事务表一起使用,您应该包括事务类型代码以及SKU和数量 . 任何给定SKU中的库存可能上升或下降的原因不同 . 最常见的是接收新股票和购买股票的客户 . 但是,还有其他一些事项,例如手动库存调整,以考虑文书错误和收缩 . 还有股票转换,例如当您决定将各种包装破碎成单个产品进行销售时 . 不要认为您可以依靠数量是正数还是负数来为您提供足够的信息,以便能够了解您的库存水平以及它们如何(以及为什么)发生变化 .