mysql - 如何在又高又窄的MySQL表中存储答案

标签 mysql data-structures

我正在设计一个数据库来存储问题和答案。我计划有 5 个表格:测验、问题、userAnswer 和 multipleChoice

测验:

quizID          (int)(primary key) Auto Increment
quizName        (varchar)

问题:

questionID      (int)(primary key) Auto Increment
quizID          (Foreign Key)
question        (varchar)
questionType    (enum) textbox, multiple choice, int, date, decimal, email, ...

用户:

userID          (int)(primary key) Auto Increment
firstname       (varchar)
surname         (varchar)
...
...

用户答案:

questionID    (Foreign Key)
userID        (Foreign Key)
answerText
answerDec
answerDate
answerInt

PRIMARY KEY(questionID, userID)

多项选择

choiceID      (int)(primary key) Auto Increment
questionID    (Foreign Key)
choiceText    (varchar)

我的问题出在答案表上,有些答案是自由格式文本,有些是小数,有些是整数(外键)

我该如何处理这个问题?我是否有 4 列,每种类型 1 列?如果是这样,在检索答案时如何有效地选择 3 个中的正确一个,我想尽可能多地在 SQL 中完成“繁重的工作”,而不必使用 PHP 生成动态查询。

最佳答案

如果您不需要搜索答案,那么我建议将它们存储在 JSON 对象或类似对象中,而不必费心使用单独的表。

quiz | question   | answers     | multipleChoice
---- | ---------- | ----------- | --------------
1    | "Country?" | [           | true
     |            |   "France", |
     |            |   "Germany" |
     |            | ]           |

关于mysql - 如何在又高又窄的MySQL表中存储答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55049031/

相关文章:

php - 使用 ORDER BY 子句通过使用从下拉菜单中选择的值来对查询进行排序

Mac OS Mojave 10.14.3 上的 MySQL 8.0 语法错误

php - mysqli_fetch_assoc 返回为 foreach() 提供的参数无效

java - 如何将日期格式转换为mysql日期格式?

go - 在 Go 中获得不同但相似类型的类似数组行为的最佳方法?

基于 Scala 队列和优先级队列的 trait

php - 无法存储下拉列表的值并在查询中使用

c - 从字符串中删除指定字符的有效方法

algorithm - 如何返回这个 F# minimax 中最好的第一级?

Java 作业 MaxSumTest