【问题标题】:Best Schema to Persist User Generated Functions?保留用户生成函数的最佳模式?
【发布时间】:2010-10-07 08:27:17
【问题描述】:
我的项目需要用户创建一些基本的数学函数,我需要将它们存储在 ms sql 数据库中,以便在我的业务逻辑中的数据集上使用。
功能将类似于:
当 (value1 介于 20 和 40 之间) then value2 = value 2 * 37.8
存储此类内容的最佳架构是什么?
什么是最有效的方法将持久化的函数翻译回来,以便我可以将它应用到数据集?
我正在使用 c# 和 ms sql 2008
【问题讨论】:
标签:
c#
sql
database-design
schema
【解决方案1】:
这是一个艰难的过程。基本上你想创建一个解析器。
我相信你需要有两个表:第一个表有一个 functionID ,orderID , operatorID
第二个表在 operatorID 和操作数之间是一对多的关系。
FunctionID 将是函数的唯一标识符。 orderID 将确定我们需要以何种顺序解析同一 functionID 的各个行。操作数将是需要与运算符一起应用的实际变量。
例如:
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
这是一个非常基本的想法。有很多陷阱。希望对您有所帮助。
【解决方案2】:
将它们存储为用户定义的函数
关于他们的好文章here
【解决方案3】:
如果反射可用,请阅读有关 Emit 和各种形式的 Load 的大量帮助,看看您是否可以解析用户的函数并以可以存储在数据库中的形式生成 .Net 可执行文件。
不过,请务必小心安全性和注入。
抱歉,没有什么比为您指出一个可能有用的方向更有帮助了。