我面临着两难境地,非常不情愿走哪条路,如果有更好的方法可以做到这一点。
我有一个通配符输入 - 如果你可以这么称呼它 - 它可能有这些类型的输入
- +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?