历史地存储公式(计算)

时间:2012-03-01 15:41:20

标签: php mysql formula historical-db

我有一个评估用户提交的应用程序,并根据各种公式为每个提交分配一个点值(所有的统一费率,第一个“x”条目的固定费率,第一个“x”条目的降级值)。公式基于提交的类型(提交的类别决定了在计算所述值时使用的点值和公式)。

问题在于客户希望历史存储这些公式,以便对于任何给定记录,他们可以查看用于计算点值的公式。

我对如何实现这一点有一些想法,但没有一个看起来像是一个不错的选择:

1)将公式存储在PHP代码中并注释掉过去的公式,确保记下生效日期范围。

2)每次更改公式时创建视图,并更新代码以使用新视图。请注意视图名称或代码中的生效日期。

3)将公式存储在公式表中,为每个公式提供唯一的ID,以及日期有效/退休值。

有没有其他或更好的方法来实现这一目标?如果更新公式,前两个将需要编写/更改大量代码,第三个需要解析,并将公式存储在DB中(我试图避免的)。

思考?

2 个答案:

答案 0 :(得分:0)

假设您指的是存储实际代码,那么正确的位置是在GitSubversion(SVN)等源代码管理器中。您可以使用特定公式标记版本。这样,每当您发布新公式时,它都会被标记。您还可以跟踪任何细微变化。这意味着在任何时候,您都可以检索旧的公式以供审核。

答案 1 :(得分:0)

我当然会将公式的结果存储在历史表中。是否需要自己存储公式取决于您拥有的公式数量以及它们的变化方式。你的基本表可能看起来像这样

calculation_id
record_id
points
formula_ref

如果您有6个固定公式,其中活动公式是这些公式的某种组合,那么您的“formula_ref”可能是每个公式的唯一字符串(即“first10”)。如果您的公式变化超过该值,或者值变化(即“第一个x”可能会从“前5个”变为“前10个”等),那么您可能需要一个单独的表来进行公式组合并从历史中链接到它们使用外键的表。如果您需要允许从应用程序(通过管理GUI或类似)动态添加/编辑公式,而不是手动更改代码,也是如此。

您的架构还取决于您打算如何使用数据。如果您只对每条记录的历史感兴趣,那么上面的基本模式和基于文本的formula_ref字段可能就足够了(在record_id上有索引)。

欢迎回复您的特定架构计划以获取更多评论......