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

时间:2016-03-30 12:41:56

标签: database database-design database-schema

我有一个逻辑表达式

c=a+b*d类似

是否可以在关系数据模型设置中实现此目的? 我不想在varchar字段中对规则进行硬编码。

我正在考虑将规则链接起来。然而,在规则引擎的某些方面,我想纯粹使用关系数据库。

1 个答案:

答案 0 :(得分:2)

这样的表达是一棵树。你的例子,以树为单位,是

=
   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"作为第一个论点。另一方面,一个简单的表达式将分散在许多数据库记录中。如果您不需要数据库的机制来检查表达式的内部结构,您可以将整个表达式作为字符串存储在单个记录中。