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将是一个不错的选择.它不是对空白敏感的,可以用大量语言创建和解析,并保留数据完整性.
只要将表达式字符串解析为内存中的树对象,就可以将其序列化并存储.如果没有必要在数据库级别上操作表达式,我想我会走那条路.
表达式是树状结构.所以你需要一种方法来在表格中呈现树.
例如,您可以使用以下字段:
在这种情况下,您有以下类型:
但我认为有更好的方法来组织表达.我曾经做过一个简单的表达式求值程序,它接受一个字符串并产生一个数字结果.