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

标签 database database-design database-schema

我有一个逻辑表达式

c=a+b*d 类似的东西

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

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

最佳答案

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

=
   c
   +
      a
      *
         b
         d

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

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

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

其中,如果是子树,将填充组件节点的运算符和外键,而如果是原语,则将填充最后一个属性。

如果您的运算符的元数(即参数的数量)很高甚至是无限的,则架构将变得更加复杂。你需要一个单独的表

argument(id, node_id, position, component_id)

携带引用节点的参数。

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

关于database - 关系数据模型中的逻辑表达式规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36309214/

相关文章:

sql - 如何针对特定查询优化表?

mysql - 将数组保存为字符串还是使用多个表?

oracle - 是否有任何理由将 PK 列单独删除

sql-server - 数据库架构澄清

mysql - 如何在我的 web 应用程序中模拟垃圾概念?

sql - Alter语句与外键冲突,但ID在两个表中都存在

sql - 哪种排序规则最适合 MySQL 中的数据类型 INT?

java - 如何在android中的ViewModel中将数据从一个LiveData对象获取到另一个对象?

php - 关系型 MySQL - 获取属性?

c# - 几个插入性能 c#