为问题和答案设计数据库,其中一些答案是文本,一些是多项选择

Eug*_*ene 5 database-design

我知道有一些相关的帖子,但我不完全明白该怎么做.

我对如何解决这个问题有一个大概的了解.不幸的是,我对数据库设计并不太了解,所以我需要帮助.

拥有带有questions_id的表,为每个question_id提供for_answer_id表.

然后有一个链接表question_answers with user_id,question_id,answer_id,timestamp来注册提交的表单.

但我的问题是,一些问题只用一个字符串来回答,所以我无法概念化该怎么做.

e,g 
for some I need: question_id string_answer (any answer is allowed)
for others:      question_id answer_id     (out of set of allowed answers)
and perhaps:     question_id bool_answer   (true/false)

我是否在某处添加了question_type,因此我有两个不同的表格?

如果问题不明确,请告诉我.

Gil*_*anc 4

编辑以考虑尤金的问题。

以下是您的系统需要的表格以及每个表格的说明。

1人

该表将包含有关参加测试的人的所有信息。表的键是人员 ID,它是一个整数,会随着添加到表中的每个人员行自动递增。当前大多数数据库都有一个标识整数或自动递增整数,这通常是表的主键。

2. 问题

该表包含您曾经想过要问的所有问题。

问题表将包含一个标志(整数或字符),用于指示问题的类型,正如您所概述的那样。

  • 任何字符串答案
  • 分配的答案集
  • 真假

3. 回答

该表包含问题表中需要一组分配答案的问题的答案集。答案集的组键是问题的主键。

通过编程,您可以从问题表中选择一行。仅当标志设置为分配的答案时,您才会在单独的 SQL 查询中浏览答案表。

4. 测试

该表包含测试的创建日期和时间。

5. 测试题

此表包含从问题表中为一项特定测试选择的问题。测试问题集的组键是测试表 ID。

拥有测试问题表的原因是可以在问题和答案表中添加、更改或删除问题和答案。测试问题表是一个历史表,一旦添加行,就永远不会更改或删除。

6. 测试

该表包含参加测试的人员的人员 ID、测试的测试 ID 以及进行测试的日期和时间。

7. 测试答案

该表包含测试的答案。测试答案集的组键是测试 ID 和测试问题 ID。