数据库设计建议 - 多个是或否问题

时间:2013-07-06 19:55:33

标签: mysql database vb.net database-design relational-database

我正在设计一个数据库表和随之而来的vb表。该表格将向每个用户询问大约40个预定义的是/否问题。如何设计数据库表以便正确存储答案。我宁愿避免在桌子上有40个左右的属性。有没有办法设计它,以便当您查询特定用户的答案时,您会看到问题并在其旁边找到答案(是/否) 谢谢

3 个答案:

答案 0 :(得分:1)

我就是这样做的。列出QUESTION表中的所有问题。这也意味着您可以随时添加新行来添加新问题。

USER

UserId |用户名|电子邮件|等..

问题

QuestionId |问题

USER_RESPONSE

UserId | QuestonId |响应


SELECT
user.Name,
question.Qustion,
user_response.Responce
FROM
user
INNER JOIN user_response
ON user.UserId = user_response.UserId
INNER JOIN question
ON user_response.QuestionId = question.QuestionId
WHERE
user.UserName = 'JoeBloggs'

答案 1 :(得分:1)

好的,用最简单的术语表示(“用户”)表以UserID作为字段1开始。 制作包含所有问题的Q表(仅当您不想在程序中对其进行硬编码时) 制作一个答案表,这个表应该有2列......用户ID和答案

你不需要外键这些2虽然从长远来看它在删除数据时更好(它会让你知道为什么你不能删除用户,例如,如果他仍然有qeustions那么没有被删除,这是为了避免你真正不需要保留的空间,因为用户将被删除)

然后您所做的就是当您一次提交问题1或同时提交所有问题时,请将UserID提供到答案表中,并附上答案。所以用户1总是1,答案会改变。

如果我是你,我也会创建问题表。所以整个事情看起来像

  

用户表

UserID,UserName,UserPass,User ...,User ......等

  

问题表

QuestionID,问题

  

答案表

用户ID,QuestionID,应答

因此,在您的程序中,因为您知道哪个问题对应于哪个questionID,所以您将插入

1(UserID),1(to40forQuestionID),answer.text(Answer)进入答案表

然后你总是能够从答案表中获取所有信息,知道答案属于哪个问题以及用户等等。

如果你需要术语以及他的解释让我兴奋,我试图将所有的术语留下来进行简化,如果你不了解它们的话。

答案 2 :(得分:0)

您可以将问题和答案存储在单独的表格中。具体来说,您将拥有一个Questions表,其中包含40个是/否问题。 Answers表将包含问题标识符,用户标识符和答案的列(对于是/否问题,您可以使用布尔值)。 AnswerChoices也可以是一个单独的表格。

根据您的需求,有很多可能的灵活性。如果同一个用户可以多次进行调查,您可以拥有一个用户调查表,并将答案链接到该表。如果需要进行多次调查,您还可以使用Surveys-Questions映射表。