Хранение формул (расчетов) исторически - PullRequest
0 голосов
/ 01 марта 2012

У меня есть приложение, которое оценивает пользовательские представления и назначает значение балла для каждого представления на основе различных формул (фиксированная ставка для всех, фиксированная ставка для первых записей «x», понижающее значение для первых записей «x»). Формулы основаны на типе представления (категория представления определяет значения баллов и формулы, используемые при расчете указанных значений).

Проблема заключается в том, что клиент хотел бы хранить эти формулы исторически, чтобы для любой конкретной записи он мог просматривать формулу, которая использовалась для вычисления значения балла.

У меня есть несколько идей относительно того, как этого добиться, но ни одна из них не кажется хорошим вариантом:

1) Сохраните формулы в коде PHP и закомментируйте предыдущие формулы, указав эффективный диапазон дат.

2) Создайте представление при каждом изменении формулы и обновите код, чтобы использовать новое представление. Отметьте даты вступления в силу в имени представления или в коде.

3) Сохраните формулы в таблице формул, указав для каждого уникальный идентификатор, а также даты вступления в силу / выбытия.

Есть ли другой или лучший способ добиться этого? Первые два потребовали бы написания / изменения большого количества кода в случае обновления формулы, а третий требует синтаксического анализа и сохранения формул в БД (чего я пытался избежать).

Мысли?

Ответы [ 2 ]

0 голосов
/ 01 марта 2012

Я бы, конечно, сохранил результаты формул в таблице истории как минимум. Нужно ли хранить сами формулы или нет, зависит от того, сколько формул у вас есть и как они меняются. Ваша базовая таблица может выглядеть примерно так

calculation_id
record_id
points
formula_ref

Если у вас есть, скажем, 6 фиксированных формул, из которых активные формулы представляют собой некоторую комбинацию из них, тогда ваш "Formula_ref" может быть уникальной строкой для каждой формулы (то есть «first10»). Если ваши формулы отличаются более чем от этого, или значения меняются (т. Е. «Первый x» может измениться с «первых 5» на «первые 10» и т. Д.), То вам может понадобиться отдельная таблица для комбинаций формул и ссылки на них из истории таблица с использованием внешнего ключа. То же самое происходит, если вам нужно разрешить динамическое добавление / редактирование формул из приложения (через графический интерфейс администратора или подобное) в отличие от ручных изменений в коде.

Ваша схема будет также зависеть от того, как вы собираетесь использовать данные. Если вас интересует только история каждой записи, вероятно, будет достаточно базовой схемы, описанной выше, с текстовым полем Formula_ref (с индексом для идентификатора записи).

Не стесняйтесь опубликовать свой конкретный план схемы для дополнительных комментариев ...

0 голосов
/ 01 марта 2012

Если вы имеете в виду сохранение фактического кода, то правильное место для этого находится в менеджере исходного кода, например Git или Subversion (SVN). Вы можете пометить релиз с определенной формулой. Таким образом, всякий раз, когда вы выпускаете новую формулу, она помечается. Вы также можете отслеживать любые незначительные изменения. Это означает, что в любой момент вы можете получить старую формулу для проверки.

...