关系数据模型中的逻辑表达式规则



我有一个逻辑表达式

c=a+b*d类似

有可能在关系数据模型设置中实现这一点吗?我不想在varchar字段中对规则进行硬编码。

我正在考虑将规则链接起来。这是一个规则引擎,但我想纯粹使用关系数据库。

这样的表达式就是一棵树。用树表示的例子是

=
   c
   +
      a
      *
         b
         d

树的叶子是原始符号a,b。。。,而(子)树的根是运算符。

表示这种树的一个简单的关系数据库结构是

node(id, operator, left_component_id, right_component_id, primitive)

其中,对于子树,将填充组件节点的运算符和外键,而对于基元,将填充最后一个属性。

如果运算符的arity(即参数数)很高,甚至是不受限制,则模式将变得更加复杂。你需要一张单独的表

argument(id, node_id, position, component_id)

它携带被引用节点的参数。

这些方案为您提供了关系数据库的全部功能。例如,您可以查询有多少表达式的第一个参数是"a"。另一方面,一个简单的表达式会以这种方式分散在许多数据库记录中。如果不需要数据库的机制来检查表达式的内部结构,则可以将整个表达式作为字符串存储在单个记录中。

最新更新