You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何设计支持if-else-then条件的路由规则数据库架构?

问卷路由规则的数据库设计方案与实现思路

一、关联现有模型的数据库表设计

基于你已有的routes(路由链接表)和question(问卷问题表),新增以下3张核心表来存储路由规则:

1. rule_definitions(规则主表)

存储每个路由规则的基础信息,关联目标路由:

字段名类型说明
rule_id主键(INT)规则唯一ID
route_id外键(INT)关联routes表,指向该规则匹配后要跳转的链接
rule_priorityINT规则优先级(数值越小优先级越高,解决多规则匹配冲突)
rule_descriptionVARCHAR(255)规则描述(方便维护,比如"年龄20-40跳转A链接")

2. rule_conditions(规则条件表)

存储每个规则下的具体判断条件,关联对应的问卷问题:

字段名类型说明
condition_id主键(INT)条件唯一ID
rule_id外键(INT)关联rule_definitions表,属于哪个规则
question_id外键(INT)关联question表,指向要判断的问卷问题
operatorVARCHAR(20)判断操作符,支持EQ(等于)、IN(包含在集合)、CONTAINS(包含)等
target_valueTEXT目标值,比如"a,b"(对应IN操作符)、"c"(对应EQ)、"kevin"(对应CONTAINS)
logic_typeVARCHAR(10)同规则下多条件的逻辑关系:AND(且)、OR(或)

3. rule_condition_groups(可选,条件组表)

如果规则需要复杂的逻辑组合(比如(条件1 OR 条件2) AND 条件3),可以新增这张表来分组管理条件:

字段名类型说明
group_id主键(INT)条件组唯一ID
rule_id外键(INT)关联rule_definitions表
group_logicVARCHAR(10)组之间的逻辑关系:AND/OR

二、示例场景的表数据填充

对应你给出的示例,填充后的数据如下:

routes表(已有)

route_idlink_urlroute_name
1A Link链接A
2B Link链接B

question表(已有)

question_idquestion_content
1您的年龄范围?
2您的姓名?

rule_definitions表

rule_idroute_idrule_priorityrule_description
111年龄选20-30或30-40,跳转链接A
222年龄选40-50且姓名含kevin,跳转链接B

rule_conditions表

condition_idrule_idquestion_idoperatortarget_valuelogic_type
111IN"a,b"OR
221EQ"c"AND
322CONTAINS"kevin"AND

三、规则匹配逻辑实现

用户提交问卷答案后,按以下步骤执行路由匹配:

  1. 按rule_priority升序(优先级从高到低)遍历所有规则
  2. 对每个规则,检查其下所有条件是否满足:
    • 若规则只有单个条件:直接判断用户答案与target_value是否符合operator定义的逻辑
    • 若规则有多个条件:根据logic_type(AND/OR)组合判断所有条件是否同时/任一满足
  3. 找到第一个满足条件的规则,跳转至其关联的link_url

四、其他可行思路

1. 规则脚本化存储

如果规则逻辑非常复杂(比如包含计算、多维度嵌套判断),可以在rule_definitions中新增rule_script字段,存储可执行的脚本片段(比如Python表达式、Groovy脚本),用户提交答案后动态执行脚本判断是否匹配。

注意:需做好脚本安全校验,避免注入风险。

2. 规则引擎集成

如果系统后续需要大量复杂规则,可集成成熟的规则引擎(如Drools、Easy Rules),将规则配置在引擎中,数据库仅存储规则的元数据和关联路由信息。

内容的提问来源于stack exchange,提问作者destiny1616

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 22:30:26