布尔表达式的数据模型

18 database-design datamodel boolean-expression

您是否知道在数据库中组织布尔表达式的方法,同时允许表达式的无限嵌套?

例:

a = 1 AND (b = 1 OR b = 2)
Run Code Online (Sandbox Code Playgroud)

整个表达式不应存储为varchar以保持数据完整性.

Tom*_*lak 15

选项1将使用嵌套表(具有id/parent_id结构的树),如Gamecat建议的那样.这样做相对昂贵,并且需要重复发出SQL查询以构建单个嵌套表达式的等效项.

选项2是使用序列化对象并将其存储到varchar列中.例如,JSON将是一个不错的选择.它不是对空白敏感的,可以用大量语言创建和解析,并保留数据完整性.

只要将表达式字符串解析为内存中的树对象,就可以将其序列化并存储.如果没有必要在数据库级别上操作表达式,我想我会走那条路.


Too*_*the 8

表达式是树状结构.所以你需要一种方法来在表格中呈现树.

例如,您可以使用以下字段:

  • ID
  • TypeExpression(和,等等......)
  • FirstChildID
  • SecondChildID

在这种情况下,您有以下类型:

  1. AND,孩子指向其他表达.
  2. 或者,孩子指向其他表达.
  3. 平等,孩子指向其他表达.
  4. Literal,FirstChild指向文字表中的条目.
  5. VariableLookup,FirstChild指向可变量表中的条目.

但我认为有更好的方法来组织表达.我曾经做过一个简单的表达式求值程序,它接受一个字符串并产生一个数字结果.