您是否知道在数据库中组织布尔表达式的方法,同时允许表达式的无限嵌套?
例:
a = 1 AND (b = 1 OR b = 2)
整个表达式不应存储为varchar以保持数据完整性.
选项1将使用嵌套表(具有id/parent_id结构的树),如Gamecat建议的那样.这样做相对昂贵,并且需要重复发出SQL查询以构建单个嵌套表达式的等效项.
选项2是使用序列化对象并将其存储到varchar列中.例如,JSON将是一个不错的选择.它不是对空白敏感的,可以用大量语言创建和解析,并保留数据完整性.
只要将表达式字符串解析为内存中的树对象,就可以将其序列化并存储.如果没有必要在数据库级别上操作表达式,我想我会走那条路.
表达式是树状结构.所以你需要一种方法来在表格中呈现树.
例如,您可以使用以下字段:
ID
TypeExpression(和,等等......)
FirstChildID
SecondChildID
在这种情况下,您有以下类型:
AND,孩子指向其他表达.
或者,孩子指向其他表达.
平等,孩子指向其他表达.
Literal,FirstChild指向文字表中的条目.
VariableLookup,FirstChild指向可变量表中的条目.
但我认为有更好的方法来组织表达.我曾经做过一个简单的表达式求值程序,它接受一个字符串并产生一个数字结果.