我知道有一些相关的帖子,但我不完全明白该怎么做。
我对如何解决这个问题有一个大概的了解。不幸的是,我对数据库设计并不太了解,所以我需要帮助。
拥有带问题的表格,每个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,因此我有两个不同的表格?
如果问题不明确,请告诉我。
答案 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
将此问题用于所有三种问题,即多项选择,填写空白和真/假问题。