我正在开发一个通过Web界面调查用户问题的应用程序。这些问题是独立的,但是可以根据先前问题的答案显示或隐藏问题。

考虑以下架构:

问题-> hasMany-> LogicGroup-> hasMany-> LogicCondition

LogicGroup是一组条件(LogicCondition)。每个条件可能类似于:

Question 1 answered 'A'
Question 2 answered 'D'


基于这两个条件,将向用户显示用户正在接近的问题。否则,它将被隐藏。

因此从本质上讲,问题将具有1个或多个“ LogicGroup”,每个逻辑组包含1个或多个“ LogicCondition”。

我主要努力的部分

这些LogicGroup和LogicCondition都可以是AND / OR /或两者的组合。我不确定如何对逻辑进行编码/架构,以允许数据库通过“与”或“或”来定义两个组是否相关。

做这个的最好方式是什么?

编辑:这是一张图像,从视觉上松散地显示了这种关系。

最佳答案

关于“或”与“和”,当一个小组同时拥有两个运营商时,您将如何优先考虑其运营顺序?只是从上到下?

这是我将根据操作顺序“从上到下”使用的数据库模式:

逻辑规则(一行代表您的问题的图像)


ID
描述


逻辑规则组(一行代表图像中的第1组或第2组)


ID
logicrules_id(从FK到logicrules)
描述
sort_value(为第一个组分配1,为每个后续组分配相同的logicrules_id)
运算符(值:AND,OR,null(当sort_value = 1时使用null))


条件(一行代表一组的单个问题)


ID
logicrulesgroups_id(从FK到logicrulesgroups)
sort_value(第一个问题被分配为1,对于相同逻辑规则组_id的每个后续问题,sort_value递增)
Question_ID
运算符(值:AND,OR,null(当sort_value = 1时使用null))


问题


ID
描述
无论您剩下的领域是什么




Cakephp术语:


逻辑规则

hasMany LogicRulesGroup

逻辑规则组

属于LogicRule
有很多条件

条件

属于LogicRulesGroup
属于问题



有很多条件

10-06 11:30