我的目标是一个简单的轮询系统,用户可以在其中创建民意调查问题,为民意调查提供一组选项(答案)并对每个民意调查进行投票。我将提供一组我需要收集的简单字段。然后,我将提供我的解决方案。你能告诉我我的解决方案是否可以接受吗?
所需字段:questionText,日期,(海报)userId,选项(答案),响应,(响应者)userID,responseDate
我的解决方案:
Table: Polls
Fields: questionID, questionText, date, userID
Table: Options
Fields: optionID, optionText, questionID
Table: Respnoses
Fields: responseID, optionID, userID, responseDate
因此,要查找用户是否已对特定民意调查做出回应,我必须这样查询:
SELECT responseID FROM Responses
WHERE userID = [user's id] AND optionID IN(
Select optionID FROM Options
WHERE questionID = [specific questionID])
这个查询也有意义吗?
提前致谢。
答案 0 :(得分:0)
这个模型对我来说很好,查询也是如此。我是JOIN的粉丝,所以我会更好地构建您的选择查询(不是推荐,只是澄清替代方案):
SELECT p.questionText, o.optionText AS selected_answer, r.responseDate, r.userID
FROM Responses r
JOIN Options o ON r.optionID = o.optionID
JOIN Polls p ON o.questionID = p.questionID
WHERE r.userID = [user ID]
我唯一的想法是,根据您的需求和您希望系统的可审计性,您可能需要额外的字段,例如选项和投票表上的时间戳。 (“date_edited”与“date_created”?在低赌注情况下,这可能不需要。)