数据库设计 - 记录交易

时间:2011-05-16 12:34:12

标签: ruby-on-rails database-design

对于如何为以下场景构建数据库,我将不胜感激:

我正在使用Ruby on Rails,因此我有以下表格:

  • 产品
  • 销售人员
  • 商店

产品是批量生产的,因此每个产品都有一个批次代码,所以我想我还需要一个批次表,它指的是产品类型。

  • 批量

在现实世界中,销售人员从产品项目(来自特定批次)获取产品,并在适当的时候将其发布到商店。重要的是,批次很大,可能分布在许多销售人员,随后是商店。

在将来某个日期,我想运行以下报告:

  • 显示发布到特定商店的所有产品批次。
  • 显示销售人员持有的所有批次(即尚未售出)。

现在,我假设我需要建立一个交易表,比如,

  • 交易
    • salesperson_id
    • batch_id(可以确定产品)
    • STORE_ID
    • typeOfTransaction(销售人员是否已获得某些股票,或出售部分股票)

通过动态运行事务记录表,我可以推导出上述报告。然而,这似乎效率低下,并且随着时间的推移,越来越慢。

我的问题是:跟踪此类交易的最佳方式是什么,最好不要求动态处理所有交易,以从给定商店的批次中获取总项目。

我不相信我可以保持库存的中央记录,因为产品是批量生产,批次由Salepeople在商店中分发。

谢谢。

1 个答案:

答案 0 :(得分:1)

  

我的问题是:跟踪此类交易的最佳方式是什么,最好不要求动态处理所有交易,以从给定商店的批次中获取总项目。

     

我不相信我可以保持库存的中央记录,因为产品是批量生产,批次由Salepeople在商店中分发。

相信它。 : - )

根据我的经验,唯一正确的方式来存储这种东西,是将其分解为类似于T-leger会计的东西,即带有会计科目表的借方/贷方。它需要动态处理才能得出你已经发现的总数,但是在处理报告和审计跟踪时,任何不足都会导致棘手的查询。

通过使用触发器维持部分或完整的总余额(例如,每家商店的每月库存变动),您可以显着加快速度。这将减少运行较大查询时需要求和的行数。您希望维护哪些内容取决于您的应用和报告要求。