【问题标题】:Modeling logical expressions of entities in a database建模数据库中实体的逻辑表达式
【发布时间】:2021-03-27 12:12:12
【问题描述】:

我有一个带有实体的数据库表 X

idX Name
1 example 1
... example ..
n example n

我想让我的客户根据X 的实体创建不同的逻辑表达式。例如,拥有主键 1,2,3,4 他们应该能够创建表达式:(1 OR 2) AND (3 OR 4) 与 GUI。该表达式稍后可用于验证某些逻辑。

因此,我创建了一个表 Operator,其中包含 ANDOR 等逻辑运算符:

idOperator Operator
1 & (AND)
2 | (OR)

XLogic:

idXLogic idX (nullable) idOperator (nullable) idXLogicLeft (nullable) idXLogicRight (nullable)

使用此表,我可以添加上面的示例:

idXLogic idX (nullable) idOperator (nullable) idXLogicLeft (nullable) idXLogicRight (nullable)
1 1 null null null
2 2 null null null
3 3 null null null
4 4 null null null
5 null 2 1 2
6 null 2 3 4
7 null 1 5 6

idXLogic=7 的行代表逻辑表达式:(idX=1 OR idX=2) AND (idX=3 OR idX=4)。这是表示这种基于逻辑表达式的好主意还是有更好的方法?

【问题讨论】:

    标签: database-design relational-database data-modeling logical-operators


    【解决方案1】:

    使用表格为元素建模逻辑表达式是一种非常复杂的方法。表达式可能涉及包含子表达式的括号,您必须了解表达式元素的顺序。要拥有一个基于将元素存储在第三范式关系表集中的完全灵活的表达式持久性机制,您需要为自己设置很多复杂性。

    有一些可用的库可以基于将表达式存储为字符串来进行表达式评估,可能在运行时将表达式中的某些标记替换为变量值或评估为值的函数。如果您使用这样的库,那么您可以将表达式存储为单个字符串。您可能希望使用库的词法分析器功能(如果有的话)来确认语法是否有效。

    我能想到的将表达式保存在规范化数据库中的唯一充分理由是,您需要对哪些表达式元素在何处使用进行一些报告或分析。不过,即使在这种情况下,您也可以将表达式本身存储为字符串,并保留一组相对简单的表(可能像单个交集表一样简单),记录哪些表达式元素在哪些表达式中使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-01
      • 1970-01-01
      • 2010-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多