关系数据模型中的逻辑表达式规则
Logical Expressions rules in relational datamodel
我有一个逻辑表达式
说 c=a+b*d
类似
是否可以在关系数据模型设置中实现这一点?
我不想在 varchar 字段中对规则进行硬编码。
我正在考虑链接规则。规则引擎上的一些东西但是我想纯粹使用关系数据库来做。
这样的表达式就是一棵树。你的例子,表示为一棵树,是
=
c
+
a
*
b
d
树的叶子是原始符号 a、b、...,而(子)树的根是运算符。
表示此类树的简单关系数据库结构是
node(id, operator, left_component_id, right_component_id, primitive)
其中,在子树的情况下,将填充组件节点的运算符和外键,而在原语的情况下,将填充最后一个属性。
如果您的运算符的元数(即参数的数量)很高甚至是无限的,则架构将变得更加复杂。您需要一个单独的 table
argument(id, node_id, position, component_id)
携带引用节点的参数。
这些方案为您提供关系数据库的全部功能。例如,您可以查询有多少表达式将 "a" 作为第一个参数。另一方面,一个简单的表达式会以这种方式分散在大量数据库记录中。如果您不需要数据库机制来检查表达式的内部结构,您可以将整个表达式作为字符串存储在单个记录中。
我有一个逻辑表达式
说 c=a+b*d
类似
是否可以在关系数据模型设置中实现这一点? 我不想在 varchar 字段中对规则进行硬编码。
我正在考虑链接规则。规则引擎上的一些东西但是我想纯粹使用关系数据库来做。
这样的表达式就是一棵树。你的例子,表示为一棵树,是
=
c
+
a
*
b
d
树的叶子是原始符号 a、b、...,而(子)树的根是运算符。
表示此类树的简单关系数据库结构是
node(id, operator, left_component_id, right_component_id, primitive)
其中,在子树的情况下,将填充组件节点的运算符和外键,而在原语的情况下,将填充最后一个属性。
如果您的运算符的元数(即参数的数量)很高甚至是无限的,则架构将变得更加复杂。您需要一个单独的 table
argument(id, node_id, position, component_id)
携带引用节点的参数。
这些方案为您提供关系数据库的全部功能。例如,您可以查询有多少表达式将 "a" 作为第一个参数。另一方面,一个简单的表达式会以这种方式分散在大量数据库记录中。如果您不需要数据库机制来检查表达式的内部结构,您可以将整个表达式作为字符串存储在单个记录中。