我目前正在设计一个数据库表和与之配套的 vb 表单。该表格将向每个用户询问大约 40 个预定义的是/否问题。如何设计数据库表以便它适当地存储答案。我宁愿避免在桌子上有 40 个左右的属性。有没有办法设计它,以便当您查询特定用户的答案时,您会看到问题并在其旁边看到他的答案(是/否)谢谢
3 回答
This is how I would do it. List all the questions in the QUESTION table. This also means you can add new questions whenever you want just by adding new rows.
USER
UserId | UserName | Email | Ect..
QUESTION
QuestionId | Question
USER_RESPONSE
UserId | QuestonId | Response
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'
好的,用最简单的术语制作一个(“用户”)表,从 UserID 作为字段 1 开始。制作一个包含所有问题的 Q 表(仅当您不想在程序中硬编码这些问题时)制作一个答案表,这个表应该有 2 列...用户 ID 和答案
您不必为这 2 个外键添加外键,尽管从长远来看,在删除数据方面它会更好(它会让您知道为什么您不能删除用户,例如,如果他仍然有尚未删除的问题,这是为了避免您确实不需要保留的空间,因为用户将被删除)
然后,您要做的就是当您一次或一次提交问题 1 时,将用户 ID 连同答案一起输入答案表。所以用户 1 永远是 1 并且答案会改变。
如果我是你,我也会创建问题表。所以整个事情看起来像
用户表
用户 ID、用户名、用户密码、用户...、用户...等
问题表
QuestionID, 问题
答案表
用户 ID、问题 ID、答案
因此,在您的程序中,因为您知道哪个问题对应于哪个 questionID,您将插入
1(UserID),1(to40forQuestionID),answer.text(Answer) 进入答案表
那么您将始终能够从答案表中获取所有信息,知道哪个答案属于哪个问题和哪个用户等等。
如果您需要术语来配合他的解释,我会尝试将所有术语排除在外以进行简化,以防您不知道它们。
您可以将问题和答案存储在单独的表格中。具体来说,您将有一个Questions
包含 40 个是/否问题的表格。该Answers
表将包含问题标识符、用户标识符和答案的列(对于是/否问题,您可以只使用布尔值)。 AnswerChoices
也可以是单独的表。
根据您的需要,有很多可能的灵活性。如果同一用户可以多次参加调查,您可以使用用户调查表并将答案链接到该表。如果需要进行多次调查,您还可以有一个调查-问题映射表。