完美适合Postgres功能与否(以及如何)?

时间:2014-12-12 09:38:25

标签: postgresql activerecord

我正在研究这种数据结构:

enter image description here

现在,我必须搜索< 90欧元,它应该只返回产品“item2”。另一方面,如果我搜索== 100欧元的产品,我应该只返回产品“item1”。

我有6万种产品和16种货币,因此我无法每天转换所有货币的所有产品(因为每日更新货币汇率)只能执行此搜索。

我有两个问题:

  • 这个用例是否适合Postgres功能?如果不是,还有其他好的和可持续的解决方案吗?

  • 如果postgres功能是解决方案。鉴于我正在使用Ruby on Rails(4.2)并且使用ActiveRecord链接搜索请求(关于产品大小,颜色等...):对DB功能的调用是否仍可链接并可在AR中使用?

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

使用函数是一个糟糕的想法,因为性能会受到很大影响:汇率会随着时间的推移而变化,导致索引无效。

此外,每件商品存储一个价格是一个糟糕的主意。心理价格和税收考虑因素:如果欧元区的增值税为99.99欧元,那么在美国以99.99美元加销售税出售它可能是有意义的。使用函数或其他函数进行汇率操纵不会改变这一点。 (比较苹果在美国,法国,英国等地的价格)。

对于每件商品,以欧元,一美元等方式关联价格 - 每个都使用currency_id,并将汇率存放在单独的表格中。或者创建某种价格表,您可以根据货币(例如€99 = $ 99)将价格与price_id相关联,并将产品(实际上是SKU,顺便说一句)与相应的price_id相关联。 / p>

您可以使用汇率表半自动填充此数据,并使用其中一个定期更新它们。但确实:保留手动设定价格的能力,确保将价格标记为包括或不含税。在涉及到税收时,不要忘记税率因地而异,从产品到下一个产品。

答案 1 :(得分:0)

为了记录,我最终在“产品”表格中创建了一个新列“price_eur”,我将每个价格转换为欧元,无论原始货币是什么。这样做我可以根据此price_eur列执行一致的搜索。

我只是想知道是否有替代解决方案,但看起来没有其他简单方法......