【问题标题】:Storing Sub-Questions in a database for a Survey/Questionnaire System在调查/问卷系统的数据库中存储子问题
【发布时间】:2016-03-29 16:17:40
【问题描述】:

我目前正在为调查/问卷系统创建表格。当我开始创建问题表时,我想我遇到了一个小问题,如果我继续,可能会影响整个应用程序。在我的问题表中,我有一个名为 "subBelongsToQuestion" 的列,它是一个整数值,用于标识哪些子问题属于哪些父问题(如果有)。然后在我的答案表中,我有一个名为 "responseRevealSubQuestion" 的列,它是一个整数值,用于标识如果 "responseRevealSubQuestion" 中的触发答案要显示哪些子问题> 列值与“响应”列值匹配。

因此,例如,如果用户对“你喜欢奶酪吗?”之类的问题回答“是”,那么就会出现一个子问题,即“你喜欢奶酪的什么?”。

我想将此愿景转换为数据库格式,但我不确定是否应该继续使用我正在使用的方法,还是应该改变?因此,如果说用户删除了包含子问题的问题,那么应用程序可以运行所需的代码来删除子问题并触发答案。

【问题讨论】:

  • 使用你的设计,删除可以通过FK的约束自动处理,你没有提到你的数据库灵魂,许多数据库灵魂都提供了删除级联的能力,在这种情况下,当你删除所有相关的问题时孩子的数据将被自动删除
  • elirevach - 你的意思是我应该将提到的列转换为 FK?

标签: mysql database


【解决方案1】:

通常对于您不使用子问题的调查应用程序,您可以定义流程条件

想象一下你的数据库有这个问题

Q_ID   Question
 1     Do you like cheese?
 2     What do you like about cheese?
 3     Do you like meat?"
 4     What do you like about meat?
 5     ...

然后你有一个流表来验证一个答案。

Q_FROM   Q_VALUE Q_TO
  1        NO      3
  3        NO      5

在这种情况下,您只需绕道NO 回答。否则你继续下一个问题。

在你做完每个问题后

SELECT Q_to 
FROM FlowTable 
WHERE Q_from = @CurrentQuestion 
  AND Q_value = @CurrentAnswer

【讨论】:

  • 所以你建议我应该在我的系统中添加另一个数据库表?但是,我将如何将这两个表联系在一起。我会通过使用 FK 来做到这一点吗?
  • 是的,在你结束每个问题后你做SELECT Q_to FROM FlowTable WHERE Q_from = @CurrentQuestion and Q_value =@CurrentAnswer
  • 好的,我稍后会尝试将该逻辑应用到我的 ERD 图表中,然后再回复您,看看结果是否符合我的预期。因此,如果用户说不,查询会查看该答案是否包含任何子问题。如果用户说是,查询是否仍会查看该答案是否包含任何子问题?我想它会,但只需要第二个意见。
  • 我做过几个这样的应用程序。但这是基本情况。你也可以考虑有多个选择的情况,那么你需要一个更复杂的流表
  • 我对此进行了研究,我认为对于我想要尝试和实现的目标,我是否仍然可以通过说明问题在问题表中的数字位置以及什么来获得相同的结果子问题需要答案才能出现在答案表中?我已经有这两个表的数据透视表,这将是查询哪个子问题属于哪个问题的情况。如果我在位置 3.1 有一个子问题,系统会知道它属于位置 3 的问题。对不起,如果我似乎在转移注意力。我只是想找到一个简单但有效的解决方案。
猜你喜欢
  • 2012-04-25
  • 1970-01-01
  • 2022-09-02
  • 1970-01-01
  • 2018-03-12
  • 2017-01-27
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
相关资源
最近更新 更多