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

时间:2011-02-21 08:32:03

标签: database-design language-agnostic user-experience

我需要构建一个应用程序(PHP / MySQL,但我认为这不重要),让用户输入一组匹配特定产品的规则。这应该看起来像一个表单,允许选择一个键并输入其值,但支持使用OR和AND语句进行分组。例如,用户应该能够输入以下产品规则:(price over 100 and red color) or (price over 50 and green color)weight over 2等。问题是,我不确定如何将其存储在数据库中,并且不确定如何为此编写UI。有没有解决这个问题的常用方法?

由于

1 个答案:

答案 0 :(得分:1)

我一直在思考这个问题。这就是我的意思:

有一个规则表:

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

然后,您将使用rule_id = 7引用复杂规则。要解决该规则,应以递归方式解析每个其他规则。 field可以是数据库中的字段,也可以是operand。然后,您就可以从此保存的数据中创建SQL查询。它也很容易加载并呈现到控件中,因此用户可以使用组合框(HTML <select>)和内容来编辑此规则。