使用MySQL视图检索运行总计

时间:2017-10-29 02:33:53

标签: mysql database view

我们正在建立一个电子商务系统,我们需要一些帮助来决定确定每种产品可用库存数量的最佳方法。

假设我们有表“products”,“products_in”和“products_out”。 “products_in”记录了我们增加产品数量的所有交易(例如,当我们从批发供应商处购买产品时)。虽然“products_out”记录了我们减少产品数量的所有交易(例如,当我们的客户购买产品时)。

在我们的应用中,检索我们产品的可用数量比在“products_in”和“products_out”表中编写/更新记录更常见。鉴于此,使用依赖于“products_in”和“products_out”的MySQL视图并计算可用库存是否比每次查询时动态计算它更有效?每当“products_in”或“products_out”中有新记录时,是否会重新计算视图上的值?或者视图会在每次查询时重新计算值(在我们的情况下这可能相当昂贵)?

1 个答案:

答案 0 :(得分:0)

  

将使用依赖于" products_in"的MySQL视图。和" products_out"并且每次我们查询时,计算可用库存比计算它更有效吗?每次在" products_in"中创建新记录时,是否会重新计算视图上的值或" products_out"?或者视图会在每次查询时重新计算值(在我们的情况下这可能相当昂贵)?

让我们考虑每种情况下的db步骤:

案例1 如果您在每次产品进入或离开时计算available_stock并将其存储在说product

  1. 如果产品进入,Insert表中的product_in查询或产品发出,Insert表中的product_out查询
  2. 在任何一种情况下,都会在产品的available_stock列中更新查询。 (假设这里有10个产品或10个产品,将会有10个单独的查询被解雇) - 贵吗?
  3. 案例2 如果您每次都在视图中计算available_stock而不将其存储在数据库中

    1. product_inproduct_out表格中获取记录(仅适用于您需要的少数产品available_stock),进行一些数学计算,并显示估算的库存 - 昂贵?
    2. 我个人会选择案例2,因为它涉及较少的数据库事务,然后案例1涉及大量交易以保持股票同步。

      脚注在旁观者中,我绝对可以说,如果你是硬核和面向对象的程序员,那么那么你的db映射肯定违反了基本原理。 Products_inProducts_out都是记录广告资源/股票交易的相同实体(对象)(如FatherMother实体为Persons),因此您应该将它们封装到一个通用表ProductInOutData中。

      ProductInOutData中,您可以添加具有in值或out值的枚举。在一个表中同时包含inout记录不仅可以提高可读性和可访问性,还有助于轻松计算进出的产品,使案例2更轻量级。