【发布时间】:2015-03-08 22:40:48
【问题描述】:
我正在设计一个销售点“POS”数据库,同时使用 MySQL 作为我的 DBMS。
在将产品添加到产品数据库时,我会添加产品名称(即“可口可乐 2.L”)和 UPC 代码、成本、价格、部门、供应商和数量。
如果我收到 1000 瓶的订单,每瓶花费 1 美元
假设 2 个月后,我只剩下 100 瓶库存“我的成本是 100 美元”。现在,我又订购了 5,000 瓶,但这次因为我订购了 5,000 瓶,供应商每瓶给我 0.10 美元的折扣(即每瓶 0.90 美元。)所以,我第二次订购的成本是 4500 美元。我想确保我非常准确地跟踪我的利润。因此,我以 1 美元购买的 100 个我希望能够以 1 美元的成本单独跟踪它们,并以 0.90 美元的成本跟踪新订单。
我目前跟踪每个销售项目成本的方式,通过从产品表中读取当前成本并将其与销售价格、transaction_id 和 product_id 一起保存在 sales_transactions_items 表中。
我现在遇到的问题是,当我收到 5000 瓶时,我将成本从 1 美元更改为 0.90 美元,这使我的利润增加了(100 瓶 x 每瓶节省 0.10 美元)100x0.10 = 10 美元的利润我实际上并没有获利。售出数量后,出现这种差异是因为数量价值达到了 5100 瓶,其中 100 瓶以 1 美元购买,5000 瓶以每瓶 0.90 美元购买。
我的问题:我该如何解决这个问题,我才能真正了解每件商品花了我多少钱。
【问题讨论】:
-
您需要另一张桌子。一个用于产品,一个用于购买
-
这如何帮助我确定前 1000 个以 1 美元购买,而 5000 个以 0.90 美元购买? item_id 和 UPC 码还是一样的
-
在表格中记录您的购买日期/时间、成本、购买的商品数量和未售出的商品数量。用日期/时间、商品数量和这些商品的成本记录您的销售额。您可能想要运行 FIFO 系统,以便您首先出售最旧的物品。如果您销售 300 件商品,其中 100 件以旧价格出售,200 件以新价格出售,您在内部记录了两条销售商品行,每个采购价对应一条。如果这些物品是可以单独追踪的(有一个序列号——不像普通的一瓶可乐,但非常像普通的电脑),那么你又会以不同的方式做事。
-
通常情况下,我会在列上应用约束:
CHECK(number >= 0)。这或多或少是标准的 SQL(概念是标准的;我需要查看符号),但我不知道 MySQL 是否支持声明和执行此类约束。至于同时更新:这就是事务和 DBMS 的用途。如果您使用的是适当的引擎(我相信是 InnoDB for MySQL),那么 DBMS 会自动处理它。您在单个事务中为销售执行所有修改操作,DBMS 防止事务相互干扰。 -
有多种可能性——没有一个是微不足道的。如果您有收据编号,您可以在销售表中查找它,这通常会告诉您哪个是价格——如果发票/收据详细信息足够详尽,您可以确定哪个批次的价格销售属于。显然,如果收据标识拆分批次,您必须选择退回的物料来自哪个批次。是不是越早越晚越便宜越贵?如果您没有收据,或者收据详细信息不充分,您可能最终会猜到它来自哪个批次。
标签: mysql database database-design point-of-sale