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

Sta*_*bie 8 mysql database database-design

我需要开发库存和销售系统.

对于库存,我需要能够跟踪理想的库存水平,当前库存水平,再订货点,成本,销售价格等.

并非库存中的每个项目都是"可销售的".例如,我可能想要保存用于苏打水的塑料杯的库存.这意味着,每次我卖苏打水时,我都要从塑料杯的库存数量中减去一个.因此,"中焦"实际上是塑料杯,一些餐巾和流体,每个项目都有自己的当前库存水平,成本等.

然后是"组合"的概念.也许1美元中等可口可乐和3美元汉堡包作为组合一起出售,仅需3.50美元(0.50美元的节省).提到可乐包括一些餐巾.说汉堡包还包括自己的餐巾纸.然而,作为一个组合,买家没有得到可乐和汉堡的餐巾; 相反,买家只获得相同数量的餐巾纸,就好像他/她只购买可口可乐一样.

对于销售系统,我需要跟踪每笔销售并可能与库存记录保持关系(这意味着,一旦销售,我就永远无法真正删除库存中的商品 - 出于历史目的).当我以1美元的价格出售"中等可乐"时,或许我应该将其分解为流体的0.90美元和塑料杯的0.10美元.

当我出售"组合"时,也许我需要能够指定汉堡包实际上以3美元的价格出售而中等可乐只需要0.50美元(只有苏打水被打折以使组合更具吸引力).

这不是一个新问题.有没有人有任何想法(或例子)我可以看看来解决这个问题?我不确定如何建模库存,可销售物品(尤其是组合)以及如何记录销售.

Joe*_*own 25

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

  • SKU这是您销售的商品清单.它的属性将包括产品描述和当前零售价格等内容.你可以把价格和价格分成一个儿童餐桌,随着时间的推移给出价格.让我们假设你现在要离开那个皱纹.有些SKU可能是您所谈论的那种"组合".

  • 组件这是组成SKU的东西的列表,例如餐巾,杯子,小圆面包,肉饼,焦糖浆等 - 使用你的例子.正如SKU有描述和价格一样,COMPONENT也有描述和单位成本.(也可以在子表中进行历史记录.)此表也是您通常存储ROP的位置.

  • 组成这是一个与SKU和COMPONENT相交的BOM,并说明每个COMPONENT的单位数量是否与SKU单位相同.您需要其中一个与两个SKU相交(对于组合).您可以使用一个表或两个表.两张桌子将让纯粹主义者感到高兴,从编码器的角度来看,一张桌子是有利的.

  • SALE这是一个交易表,提供用于记录一个或多个SKU销售的标题.此表将包含交易日期,出纳员ID和其他标题项.

  • SALE_ITEM这是交易明细表,其中包括销售的SKU(以及销售数量)以及销售量.在销售时SKU价格的非规范化程度是多少,但也可能包括价格的任何特殊覆盖.实际收取SKU的价格是非正规化的好事,因为有人可以编辑SKU中的定价,然后你就会忘记当时物品的实际收费金额.

  • INVENTORY_HDR这是一个类似于SALE概念的交易表,但它是库存交易的标题,例如接收新库存,使用库存(如卖出)和库存调整.同样,这将是日期/描述内容,但如果您愿意,它可以包括指向SALE_ITEM的直接链接,以便进行销售.您不必这样做,但有些人喜欢在交易的基础上建立收入和成本之间的联系.

  • INVENTORY_DTL这是库存交易的详细信息.这表示进入或离开的COMPONENT,进入或退出的数量以及此移动应用于的INVENTORY_HDR事务.这也是您保留组件项目的实际成本的地方.

  • 位置您可以(如果您愿意)跟踪您收到和使用/出售的库存的物理位置.在一家餐馆,这可能并不重要,但如果您有连锁店,或者您的餐厅有一个非现场仓库的成分配料,那么您可能会关心.

考虑以下ERD: ERD

要进行收入会计,您需要将SALE_ITEM表中记录的金额相加.

库存水平是根据每个COMPONENT的INVENTORY_DTL输入和输出加起来计算的.(不要将当前库存水平存储在表格中 - 这注定会导致对帐问题.)

要进行成本核算,您需要将INVENTORY_DTL表中记录的金额相加.需要注意的是,你通常不会确切地知道哪些餐巾纸或小面包你卖了,所以这将是不可能的特定组件reciepts与特定的SKU销售环节.相反,您需要有一个约定来确定哪些组件用于任何给定的SKU.您可能有会计规则,指定您需要使用的约定.大多数人使用FIFO.一些行业使用LIFO,我甚至看到加权平均成本会计.

  • 可以将"SALE"视为收据,将"INVENTORY_HDR"视为提单.每次销售可以是多件商品.这可能是因为您订购了几个人,或者您可能点了不同的菜单.你可能没有_need_有一个标题,但它更好地反映了实际发生的事情.另一方面,如果您的某个信息中心指标是普通客户销售,那么您确实需要标题将同时销售的商品绑定在一起.接收库存也是如此.交货通常包括许多不同的项目. (2认同)
  • 您无法在此模型中计算 SKU 的库存,因为 SKU 被松散地定义为一个或多个组件。OP 的问题是关于快餐店场景的。如果你去麦当劳,你怎么问他们的巨无霸库存是多少?他们的Happy Meals存货怎么样?这个问题没有答案,因为这些项目是由许多项目中使用的通用组件准备的。手头上的芥末是不是只能用来吃Happy Meals?四分之一磅的价格是多少?这不是您应该应用于零售应用程序的模型。它适用于制造场景。 (2认同)
  • 如果我们为所有这些表都有ER图表以便最终理解,那就太好了:) (2认同)