设计灵活高效的问答系统

Sco*_*pey 13 c# sql database-design design-patterns

我一直在研究一个动态的问答系统,但是我在为这个系统创建一个高效灵活的设计时遇到了麻烦.我很想知道是否有既定的设计模式或任何设计该系统的建议.

我想做什么

我有一系列问题.在回答之后,将显示另一组问题,具体取决于前一组的答案.这个重复,直到不再需要问题为止.

问题的答案都是布尔值,多项选择或数字.

重要的是,大多数问题仅在满足一组特定标准时显示,并基于之前的答案.
我需要标准来支持主要的布尔逻辑,例如And,Or,Not,Equals,Greater Than和Less Than.

举例来说,假设我已经收到答案的问题,如Age,GenderState.
接下来的问题之一是In School?,但只有在以下情况下才能显示:Age < 30 AND Gender=Male AND (State = CA OR State = NY)

有没有人听说过类似的设计模式?你会如何处理这种设计?


背景资料

我试过数据库专栏

起初,我们只有3个初始问题,因此我们只使用3列来过滤第二组问题.

但是,我们的业务需求不断增长,我们开始需要更多初始问题,添加更多列,并在这些过滤器中添加更多逻辑.

这很快变得太僵硬和麻烦.

我尝试过Logic Interpreter

我们第二次尝试使系统更加灵活:将过滤逻辑存储为JavaScript,并运行JavaScript解释器来过滤结果.

这对于灵活性非常有效,但是从数据库中检索数千行并解释脚本的效率极低,并且对于生产执行效果太差.

我试过混合动力车

我们最终将这两种方法结合起来,并提出了一些可行的方法.
我们首先根据几个硬编码的数据库列过滤我们的列表,然后使用JavaScript解释器进一步过滤列表.

这种混合系统仍有许多缺点:

  • 逻辑在两个不同的系统中(SQL数据库逻辑和JavaScript解释器)
  • 解释JavaScript很慢,并且对于所需的简单布尔逻辑可能有点过分
  • 系统很难维护,特别是因为JavaScript逻辑必须始终由开发人员编写.

我真的很想听听如何改进这种设计的建议.

其他信息

我的数据库是MS SQL Server,后端是.NET C#,JavaScript解释器是JINT.UI实现并不重要,但它是一个支持AJAX的网站,用于询问和回答这些问题.

Fad*_*man 3

过去我们必须为医疗系统做类似的事情,由于其复杂性,我们不得不重用支持多分类决策树的规则引擎。我记得我遇到过一个关于此的漂亮简单的设计,并设法找到了链接。

http://www.javaworld.com/javaworld/javatips/jw-javatip139.html?page=1

该设计与数据存储松散耦合,因此可以轻松融入您现有的解决方案设计。