【问题标题】:Logical Expressions rules in relational datamodel关系数据模型中的逻辑表达式规则
【发布时间】:2016-03-30 12:41:55
【问题描述】:

我有一个逻辑表达式

c=a+b*d 类似

是否可以在关系数据模型设置中实现这一点? 我不想在 varchar 字段中硬编码规则。

我正在考虑链接规则。规则引擎的一些东西,但是我想纯粹使用关系数据库来做。

【问题讨论】:

    标签: database database-design database-schema


    【解决方案1】:

    这样的表达式是一棵树。你的例子,表示为一棵树,是

    =
       c
       +
          a
          *
             b
             d
    

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

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

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

    在子树的情况下,将填充组件节点的运算符和外键,而在原语的情况下,将填充最后一个属性。

    如果您的操作符的数量(即参数数量)很高甚至无限,那么架构会变得更加复杂。你需要一个单独的表

    argument(id, node_id, position, component_id)
    

    携带被引用节点的参数。

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

    【讨论】:

    • 非常感谢您提供详细信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    相关资源
    最近更新 更多