я хочу сохранить следующую формулу в базе данных
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, пожалуйста, не стесняйтесь поделиться
заранее спасибо.
Решение вышеупомянутого подхода, который я придумал.
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) это помогает мне заменить значения базы данных, так как у меня есть массив столбцов базы данных, из которого я получаю значения и выполняю формулу и возвращаю значения.
Других решений пока нет …