Database design 我应该如何存储用户定义的选择规则?

Database design 我应该如何存储用户定义的选择规则?,database-design,language-agnostic,user-experience,Database Design,Language Agnostic,User Experience,我需要构建一个应用程序(PHP/MySQL,但我认为这并不重要),让用户输入一组与特定产品匹配的规则。这应该看起来像一个表单,允许选择一个键并输入其值,但支持使用OR语句分组。例如,用户应该能够输入以下产品规则:(价格超过100,红色)或(价格超过50,绿色),重量超过2等等。问题是,我不确定该如何将其存储在数据库中,也不确定如何为此编写UI。有没有共同的方法来解决这样的问题 谢谢我想了好一阵子了。以下是我得出的结论: 有一个规则表: rule_id int, field1 varchar, r

我需要构建一个应用程序(PHP/MySQL,但我认为这并不重要),让用户输入一组与特定产品匹配的规则。这应该看起来像一个表单,允许选择一个键并输入其值,但支持使用OR语句分组。例如,用户应该能够输入以下产品规则:
(价格超过100,红色)或(价格超过50,绿色)
重量超过2
等等。问题是,我不确定该如何将其存储在数据库中,也不确定如何为此编写UI。有没有共同的方法来解决这样的问题


谢谢

我想了好一阵子了。以下是我得出的结论:

有一个规则表:

rule_id int,
field1 varchar,
rule1_id int,
operand varchar, --whatever, can be int, if operand is described in other table.
field2 varchar,
rule2_id int
您的示例规则可以用以下方式表示:

rule_id  field1   rule1_id      operand     field2      rule2_id
1       'price'     null            '>'       '100'       null
2       'color'     null            '='       'red'       null
3       null        1               'and'     null        2
4       'price'     null            '>'       '50'        null
5      'color'    null            '='       'green'     null
6       null        4               'and'     null        5
7       null        3               'or'      null        6

然后,您将引用
规则\u id
=7的复杂规则。要解析该规则,应递归解析每个其他规则<代码>字段可以是数据库中的字段,也可以是操作数。然后,您将能够从保存的数据中形成SQL查询。它也很容易加载并显示到控件中,因此用户可以使用组合框(HTML
等)编辑此规则。

我已经考虑了一段时间了。以下是我得出的结论:

有一个规则表:

rule_id int,
field1 varchar,
rule1_id int,
operand varchar, --whatever, can be int, if operand is described in other table.
field2 varchar,
rule2_id int
您的示例规则可以用以下方式表示:

rule_id  field1   rule1_id      operand     field2      rule2_id
1       'price'     null            '>'       '100'       null
2       'color'     null            '='       'red'       null
3       null        1               'and'     null        2
4       'price'     null            '>'       '50'        null
5      'color'    null            '='       'green'     null
6       null        4               'and'     null        5
7       null        3               'or'      null        6
然后,您将引用
规则\u id
=7的复杂规则。要解析该规则,应递归解析每个其他规则<代码>字段可以是数据库中的字段,也可以是操作数。然后,您将能够从保存的数据中形成SQL查询。它也很容易加载并显示到控件中,因此用户可以使用组合框(HTML
)等编辑此规则