我希望设计一个库存数据库,跟踪快餐店。由于这将是一个人/计算机访问,并且需要很容易地移动到另一个系统,所以我计划使用SQLite作为DB引擎。基本概念是跟踪从Sams Club等批发仓库购买的库存,然后跟踪库存。
我试图克服的主要障碍是如何在products数据库中跟踪批量项目与单个项目。例如,如果购买了一个散装物品,假设购买了24包焦炭,我如何在产品数据库中维护散装物品,并且它包含24个单独的物品。如果所有的散装物品只包含1个物品的倍数,那么解决方案将相当容易,但在各种包装中,例如包含5个不同的单独物品的薯片纸箱,都具有独立的UPC,解决方案就会变得有点困难。
到目前为止,我已经提出了多次扫描数据库以获取所有信息的多遍方法。
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当我向库存中添加一个批量项目(一个正数量事务)时,它应该添加它的所有单个项目,因为我想不出什么时候我会有库存来销售批量项目。但是,我希望将批量项目保留在数据库中,以帮助接收它们并将其添加到库存中。
发布于 2011-07-08 05:56:15
一种方法是在批量对象及其内容之间创建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的所有批量对象等)。
发布于 2011-07-08 07:41:51
我不得不同意和不同意jspcal。我同意"bulk_item“表,但我不会说使用逗号分隔的列表是”好“的。我怀疑他们只是出于礼貌,不会支持一个不是第一范式的设计。
jspcal建议的设计通常被称为"Bill of Materials“,这是解决像复合产品这样的问题的唯一明智的方法。
为了在您的交易表中有效地使用它,您应该包括交易类型代码以及SKU和数量。您在任何给定SKU中的库存可能上升或下降有不同的原因。最常见的是收到新的股票和客户购买股票。然而,还有其他事情,如手动库存调整,以考虑文书错误和收缩。还有一些库存转换,比如当你决定将一个品种包装成单独的产品出售时。不要认为你可以指望数量是正数还是负数,就能给你足够的信息来理解你的库存水平,以及它们是如何(以及为什么)变化的。
https://stackoverflow.com/questions/6617543
复制相似问题