存储混合类型数字(百分比和平面值)的最佳做法


best practice to store mixed type of numbers (percents and flat values)

我面临着两难境地,非常不情愿走哪条路,如果有更好的方法可以做到这一点。

我有一个通配符输入 - 如果你可以这么称呼它 - 它可能有这些类型的输入

  • +0.77
  • +0.5%
  • -0.51%

平面值始终为正值,百分比值可以是其中之一。

存储这些值的最佳做法是什么?作为字符串或 2 列,一列带有值,另一列用于值类型的布尔值?

我很困惑,因为如果我选择最简单的路径,在某些情况下我会遇到另一个问题,我需要将这些所说的值乘以一个整数并考虑trim($value, '%')然后检查它是否有它以将其添加到结果中

这可能看起来有点矫枉过正,但我肯定会在这里寻找对象。

两个类,一个按绝对值偏移,另一个按百分比值偏移。定义一个工厂方法来分析输入字符串并实例化任一类。

然后,让两个类扩展一个公共接口,该接口将包含一个类似 getAjustedValue(initialValue):ajustedValue 的方法。这将使这些 ajustment 值的使用更加容易和清洁。

OP 评论后更新

至于数据库中的存储,我会将两种类型的 ajustements 存储在不同的列中。它使得编写一个计算刚好值的 SELECT 语句变得非常容易,如: SELECT (original_value * ajustement_ratio + ajustement_absolute) as adjusted_value FROM ... .

显然,我希望正义和original_value不会来自同一张桌子,但这会给你大局。

为什么不将 -0.51% 存储为 -0.0051?