首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库设计:库存和销售系统?

数据库设计:库存和销售系统?
EN

Stack Overflow用户
提问于 2011-11-09 02:24:51
回答 2查看 22.8K关注 0票数 12

我需要开发一个库存和销售系统。

对于库存,我需要能够跟踪理想的库存水平,目前的库存水平,重新订购点,成本,销售价格等。

并不是库存中的每一项都是“可出售的”。例如,我可能想要保存用于汽水的塑料杯子的库存。也就是说,每次我卖一杯苏打水,我都需要从塑料杯的存货中减去一杯。因此,“中焦炭”实际上是塑料杯、一些餐巾纸和液体,每个项目都有自己的库存水平、成本等。

还有“组合体”的概念。也许一杯1美元的中号可乐和一个3美元的汉堡包一起作为一个组合出售,价格仅为3.5美元(节省0.50美元)。有人提到可乐里有一些餐巾纸。说汉堡本身也包括餐巾纸。然而,作为一个组合,买方没有得到餐巾纸可乐和汉堡包;相反,买方只得到相同数量的餐巾纸,就像他/她只是买可乐。

对于销售系统,我需要跟踪每一次销售,并可能与库存记录保持一种关系(这意味着,为了历史目的,我永远不会真正删除库存中的项目)。当我以1美元的价格出售一瓶“中杯可乐”时,也许我应该把它细分为液体0.90美元和塑料杯0.10美元。

当我卖一个“组合”的时候,也许我需要具体说明汉堡实际上卖了3美元,而中等的可乐只有0.50美元(只有苏打水被打折,以使这个组合更有吸引力)。

这不可能是个新问题。,我有什么想法(或例子)可以解决这个问题吗?,我不知道如何对库存、可销售项目(特别是组合体)进行建模,以及如何记录销售情况。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-09 23:56:11

您正在寻找的解决方案将依赖于一个会计风格的模式和几个材料清单(BOM)。您的主要实体类型将包括:

  • SKU,这是你卖的东西的清单。它的特性将包括产品描述和当前零售价格。你可以得到花哨和打破价格的儿童桌子,随着时间的推移,价格。让我们假设你现在要把皱纹放在一边。一些SKU可以是你所说的那种“组合体”--这是构成SKU的东西列表,比如餐巾纸、杯子、面包、馅饼、可乐糖浆等等--举你的例子。就像SKU有描述和价格一样,组件也有描述和单位成本。(它也可以在子表中进行历史记录。)这个表通常是存储ROP too.
  • COMPOSITION的地方,这是一个BOM,它与SKU和组件相交,并说明每个组件有多少个单元进入一个SKU的单元。您也需要其中之一来交叉两个SKU(对于组合体)。为此,您可以使用一个表或两个表。两个表将保持纯粹主义者高兴,一个表将是权宜之计,从一个编码器点的view.
  • SALE -这是一个交易表,提供一个头记录一个或多个SKU的销售。此表将包含事务日期、出纳ID和其他报头items.
  • SALE_ITEM --这是事务详细表,它将包括哪些SKU被出售(以及多少)和多少。在出售时,SKU的价格被取消了多少,但也可能包括对价格的任何特殊重写。对于SKU实际收取的价格是一件好事,因为有人可以在SKU中编辑列表价格,然后您将无法了解在time.
  • INVENTORY_HDR上该项目实际收取了多少--这是一个与销售概念类似的事务性表,但它是库存事务的标题,例如接收新库存、耗尽库存(如销售库存)和库存调整。同样,这将是日期/描述的东西,但它可以包括一个直接链接到一个SALE_ITEM库存运动,如果你愿意的销售。您不必这样做,但有些人喜欢通过事务basis.
  • INVENTORY_DTL在交易中建立收入和成本之间的联系--这是库存事务的详细信息。这表明了哪个组件正在输入或输出,输入或输出的数量,以及该移动应用到的INVENTORY_HDR事务。这也是您保存组件item.
  • LOCATION的实际成本的地方,您可以(如果愿意)还跟踪您接收和使用/出售的库存的物理位置。在一家餐厅,这可能并不重要,但如果你有一个连锁店,或者如果你的餐厅有一个非现场仓库的成分成分,那么你可能会关心。

考虑以下ERD:

为了进行收入核算,您需要将记录在SALE_ITEM表中的资金相加。

库存级别是根据每个组件的INVENTORY_DTL输入和输出相加计算的。(不要将当前的库存水平存储在表中--这注定会导致调节问题。)

为了进行成本核算,您需要将记录在INVENTORY_DTL表中的钱加起来。请注意,您通常不会确切地知道您出售的餐巾纸或bun,所以不可能将特定的组件接收与特定的SKU销售联系起来。相反,您需要有一个约定来确定在任何给定的SKU中使用了哪些组件。您可能有指定您需要使用的约定的会计规则。大多数人使用FIFO。有些行业使用LIFO,我甚至见过加权平均成本会计。

票数 30
EN

Stack Overflow用户

发布于 2011-11-09 17:22:59

我建议把存货表和货币会计表完全分开。例如,你给出的例子--我知道这是荒谬的:对于你的普通快餐店来说,一杯$.90分值可乐的价格约为0.05-0.07美元,而液体的价格不到一分钱,这给$.83ish留下了可观的利润。为什么成本要加到$.90呢?

表:

InventoryItems字段: InventoryItemId,Name,CurrentInventoryLevel,IdealInventoryLevel

InventoryChangeRecords字段: InventoryChangeId、InventoryItemId、Change (int)

RetailItems字段: RetailItemId,名称,价格

RetailItemMakeup字段: RetailItemId,InventoryItemId,Quantity

SaleTransactions字段: SaleTransactionId,DateTime,TotalSale

SaleTransactionItems字段: SaleTransactionId,RetailItemId,Quantity

对于每个销售,您应该使用sproc (或触发器)更新CurrentInventoryLevel,并将记录插入到InventoryChangeRecords中。从SaleTransaction到SaleTransactionItems到RetailItemMakeup,您可以很容易地了解任何销售是如何影响库存的。

如果您想以一种更强大的(但海事组织无关的)方式来实现它,您可以在SaleTransactionItems和InventoryChangeRecords之间创建另一个多到多的表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8059682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档