mysql — сохранить формулу в базе данных и значение подстановки во время выполнения переполнения стека

я хочу сохранить следующую формулу в базе данных

Z-Score = 1.2(Working_Capital/Total_Assets) + 1.4(Market_Value/Total_Assets)

Working_Capital, Total_Assets, Retained_Earnings хранятся в базе данных для разных таблиц
Например: — Total_Assets = BalanceSheet.totalAssets, Market_Value = expert.market_value

эта формула может быть изменена пользователем через форму, он может добавить больше формул к формуле

Z-Score = 1.2(Working_Capital/Total_Assets) + 1.4(Market_Value/Total_Assets)+1.0(Sales/Total Assets)

ПРОБЛЕМА: —
Теперь имейте в виду, что формула может измениться в любое время, когда мне нужно сохранить ее в базе данных по идентификатору пользователя, чтобы я мог предоставить ей возможность редактирования.
также формула используется для расчета данных за период лет.
у многих пользователей будет много формул.

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

некоторые предлагают преобразовать выражение в древовидную структуру данных, но я не знаю, какая древовидная структура подойдет моему приложению ???

наконец, мне нужно сохранить его в базе данных MySQL, так что будет быстрее хранить и получать дерево ???

Я прошу предложений, так как я чувствую, что это сложная проблема, но если кто-то уже решил ее PHP, пожалуйста, не стесняйтесь поделиться

заранее спасибо.

0

Решение

Решение вышеупомянутого подхода, который я придумал.

1) взять формулу у пользователя и при выборе операндов формулы создать новый массив операндов, который сопоставляет имена операндов во внешнем интерфейсе с соответствующими им значениями таблицы базы данных и имени столбца
например:-

`$input['operands'] = array(
array('Total_Assets' => 'balance_sheet.TotalAssets'),
array('Working_Capital' => 'balance_sheet.WorkingCapital'),
array('Revenue' => 'balance_sheet.TotalRevenue'),
);`

2) создайте инфиксную форму формулы, из которой вы можете создать двоичное дерево следующей формы
инфиксная форма: —

(
[0] => revenue
[1] => total_assets
[2] => working_capital
[3] => +
[4] => /
)

Бинайное дерево: —

{"__exp1":{"operator":"+","operand":["working_capital","total_assets"]},"root":{"operator":"\/","operand":["__exp1","revenue"]}}

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

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]