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

时间:2012-02-24 15:09:06

标签: database-design

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

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

拥有带问题的表格,每个question_id都有for_answer_id的表格。

然后有一个链接表question_answers,其中包含user_id,question_id,answer_id,时间戳,用于注册提交的表单。

但我的问题是,有些问题只是用字符串来回答,所以我无法概念化该怎么办。

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,因此我有两个不同的表格?

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

2 个答案:

答案 0 :(得分:4)

编辑考虑到尤金的问题。

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

<强> 1。人

此表格将包含有关参加测试的人员的所有信息。表的关键是一个person id,它是一个整数,对于添加到表中的每个人行自动递增。大多数当前数据库都有一个标识整数或自动递增的整数,它通常是表的主键。

<强> 2。问题

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

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

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

第3。答案

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

以编程方式,您将从问题表中选择一行。只有当该标志设置了分配的答案时,您才能在单独的SQL查询中浏览答案表。

<强> 4。测试

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

<强> 5。测试问题

此表包含从一个特定测试的问题表中选择的问题。测试问题集的组密钥是测试表ID。

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

<强> 6。测试

此表包含参加测试的人员的人员ID,测试的测试ID以及测试的日期和时间。

<强> 7。测试答案

此表包含测试的答案。 Test Answers集的组密钥是Test Taken id和Test Question id。

答案 1 :(得分:2)

尝试这三个表格。

QUESTION_MASTER

QuestionID    int  (Primary)
QuestionName  varchar(150)
QuestionType  tinyint
CorrectAns1   bit          -- for true/false
CorrectAns2   varchar(500) -- for string answer
CorrectAns3   int          -- for multiple choice

ANSWER_MASTER

AnswerID      int  (Primary)
QuestionID    int  (Foreign)
CorrectAns    bit

EXAM_MASTER

ExamID        int(Primary)
QuestionID    int(Foreign)
CreatedBy     int(Foreign) --UserID

将此问题用于所有三种问题,即多项选择,填写空白和真/假问题。