如何在数据库中存储可用的项目数量?

时间:2015-04-08 04:00:39

标签: php database postgresql symfony

我很难找出在我正在处理的应用程序中为项目存储available_quantity的最佳方法。这些是我现在的一些表格:

  1. items表,其中包含基本项目信息:

    item_id   name
    1         Item 1
    2         Item 2
    
  2. inventory表,用于记录商店收到商品的时间和价格:

    inventory_id  item_id quantity price
    1             1       +10       12.50
    2             1       +5        12.30
    
  3. orders表,用于记录商品的销售时间:

    order_id  item_id  quantity  price
    1         1        -4         12.60
    
  4. abc表,由特定组件使用;此处的数量从总数中减去:

    abc_id   item_id   quantity
    1        1         -3
    
  5. def表,由特定组件使用;此处的数量从总数中减去:

    def_id   item_id   quantity
    1        1         -3
    
  6. 通常情况下,人们会查看所有表格并将数量相加以找到available_quantity(在本例中为5)。遗憾的是,由于应用程序中存在一些复杂的业务逻辑,因此这不是最佳解决方案,并且随着时间的推移性能将不可避免地降低。

    我正在寻找一种更方便,更可靠的方法来将available_quantity存储在数据库中,以便随时快速运行。我想在items表中创建一个名为available_quantity的列。它将由一个函数更新,该函数在其他表中插入/更新时触发并添加提交的quantity值,但我不确定在某个时间点之后这是否会不同步。此外,如果我让函数对表执行COUNT()查询,它将具有与现在相同的效果。

    在存储或计算数据库中项目的可用数量的复杂方案中,什么被认为是最佳做法?

1 个答案:

答案 0 :(得分:1)

这取决于您的应用程序的规模。我通过使用redis或其他no_sql解决方案作为键值存储来解决此问题,并在插入,更新或删除相关对象时更新值。是的,您将面临异步的风险,但如果您正确实施它,您会发现该解决方案实际上具有非常高的可靠性。

但是,如果您不需要处理那么大规模的项目,我只需坚持执行所有数据库查询。