Лучшая схема для сохранения пользовательских функций? - PullRequest
1 голос
/ 13 февраля 2009

Мой проект требует, чтобы пользователи создавали некоторые базовые математические функции, мне нужно хранить их в базе данных ms sql для использования в наборах данных в моей бизнес-логике.

Функции будут похожи на: когда (значение 1 между 20 и 40), то значение 2 = значение 2 * 37,8

Какова лучшая схема для хранения чего-то подобного?

И какой самый эффективный способ перевести сохраненную функцию обратно, чтобы я мог применить ее к наборам данных?

Я использую C # и MS SQL 2008

Ответы [ 3 ]

1 голос
/ 13 февраля 2009

Это сложный вопрос. В основном вы хотите создать парсер.

Я считаю, что вам нужно иметь две таблицы: первая таблица будет иметь идентификатор функции, идентификатор заказа, идентификатор оператора

Вторая таблица будет иметь отношение 1 ко многим между operatorID и операндами.

FunctionID будет уникальным идентификатором для функции. orderID определит, в каком порядке нам нужно проанализировать различные строки для одного и того же идентификатора функции. операндами будут фактические переменные, которые должны быть применены к оператору.

Например:

Table 1 

FuncID         OrderID         OperatorID
1              1               1 (for *)
1              2               2 (for +)

Table 2

OperatorID       Operands
1                a
1                b
2                c

После разбора это станет f (x) = a * b + c

это очень основная идея. Есть много ошибок. Надеюсь, это поможет.

0 голосов
/ 13 февраля 2009

Если рефлексия доступна, прочитайте кучу справки по Emit и различным формам Load, чтобы узнать, сможете ли вы проанализировать функцию пользователя и создать исполняемый файл .Net в форме, которую вы можете сохранить в базе данных.

Будьте действительно осторожны с безопасностью и инъекцией.

Извините, не может быть более полезным, чем указывать вам в возможно полезном направлении.

0 голосов
/ 13 февраля 2009

Сохраните их как пользовательские функции

Хорошая статья о них здесь

...