我正在开发一个通过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
属于问题
题
有很多条件