Php 历史地存储公式(计算)

Php 历史地存储公式(计算),php,mysql,formula,historical-db,Php,Mysql,Formula,Historical Db,我有一个应用程序,它评估用户提交的内容,并根据各种公式为每个提交内容分配一个分值(所有提交内容的统一费率,第一个“x”条目的统一费率,第一个“x”条目的降级值)。公式基于提交的类型(提交的类别决定了点值和计算所述值时使用的公式) 问题在于,客户希望历史性地存储这些公式,以便对于任何给定的记录,他们可以查看用于计算点值的公式 关于如何实现这一点,我有一些想法,但似乎没有一个是好的选择: 1) 将公式存储在PHP代码中,并注释掉过去的公式,确保注意有效日期范围 2) 每次更改公式时创建一个视图,并更

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

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

关于如何实现这一点,我有一些想法,但似乎没有一个是好的选择:

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

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

3) 将公式存储在公式表中,为每个公式提供唯一的id以及生效日期/失效日期值

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


想法

假设您指的是存储实际代码,那么正确的位置是在源代码管理器中,如or(SVN)。可以使用特定公式标记发布。这样,每当您发布新公式时,它都会被标记。您还可以跟踪任何微小的更改。这意味着在任何时候,您都可以检索一个旧公式进行审查。

我肯定至少会将公式的结果存储在历史记录表中。是否需要存储公式本身取决于您拥有的公式数量及其变化方式。您的基本表可能如下所示

calculation_id
record_id
points
formula_ref
例如,如果您有6个固定公式,其中活动公式是这些公式的一些组合,那么您的“公式_ref”可能是每个公式的唯一字符串(即“first10”)。如果您的公式变化超过此值,或者值发生变化(即“first x”可能从“first 5”更改为“first 10”等),则您可能需要一个单独的公式组合表,并使用外键从历史记录表链接到它们。如果您需要允许动态添加/编辑应用程序中的公式(通过管理员GUI或类似方式),而不是手动更改代码,也可以这样做

您的模式也将取决于您打算如何使用数据。如果您只对每个记录的历史感兴趣,那么上面的基本模式和基于文本的公式\u ref字段可能就足够了(在记录\u id上有一个索引)


请随时发回您的特定模式计划以获得更多评论…

我喜欢第3条,但实际上不要解析公式。将结果和公式都存储在历史记录中。这两个答案中的任何一个有助于您解决此问题吗?如果是这样的话,你应该接受这样做。虽然我不会投票反对使用VCS,但我认为这并不能解决问题,因为他建议客户需要查看每个记录的历史记录和计算。即使使用VCS,你仍然可以这样做。查询特定补丁并将其呈现给客户是相当简单的。事实上,任何其他方式都会导致滥用。例如,将其存储在数据库中意味着可以在不更改实际代码的情况下对其进行更改。至少有了SCM,他的客户可以保证准确性。