【发布时间】:2017-03-15 22:26:54
【问题描述】:
我已经阅读了很多页面,但没有找到我想要的东西。 我正在尝试找出最适合我的问题的解决方案。我目前有一个包含 23 个问题和 23 个 cmets 部分的多项选择表(每个问题 650 个字符,基本上每个问题一个评论),我不确定我是否应该使用单个表格或者这是否太多。
所以基本上是这样的:
id
user_id
date
multiplechoice1
..
multiplechoice23
comment1
..
comment23
status
这将是大约 50 列:/ 有没有更好的方法来做到这一点?就像在不同的表上拆分 cmets 或以某种方式将所有多个选项组合在一个列中?因为每个答案都是 1-5。
问题示例:
您通常每天上网多长时间?
- 0-1 小时
- 2-3 小时
- 4-6 小时
- 超过 7 小时
【问题讨论】:
-
就个人而言,我会去 5 张桌子。
forms、questions、answers,然后是两个关系表:form_questions和question_answers。当然,命名约定是个人喜好。您的所有表格都在forms表中,questions中的问题,answers中的答案。您的form_questions表有两列:form_id和question_id,您可以在其中列出表单的所有问题。question_answers表也有两列:question_id和answer_id,您可以在其中列出问题的所有答案。 -
@Santi 有问题的表格是固定的,很长一段时间不会添加或删除任何内容(如果添加/删除任何内容将是1-2个问题)。首先将它们放在数据库中是否值得?谢谢!
-
如果它始终是一种固定形式,那么您不必担心
forms或form_questions表。如果您将不重复使用问题的答案,那么您也不需要question_answers表。不过,在您的情况下,我最扁平的结构是两个表:questions和answers。在您的answers表中有一个question_id列。这样,您可以将 5 个答案放在那里,并将它们全部设置为question_id: 1,这意味着问题 1 有这 5 个可能的答案。 -
@Santi 我目前已经在一个 php 文件中获得了所有问题和答案,所以如果 Q1 回显这个问题和答案,我想将答案保存在 tinyint 中以了解用户选择了哪个答案和 cmets 的文本。 (见上面的编辑版本)
-
如果这些问题是轮询,而不是多项选择“正确/不正确”,那么我会包含某种
selected_answers表,您只需在其中跟踪每个问题的选择答案,非常类似于我之前建议的question_answers表,但您正在跟踪选择的答案而不是可能的答案。
标签: php mysql database database-design