我应该如何在我的关系数据库中组织这个(简单的轮询系统)?

时间:2012-10-15 19:54:12

标签: mysql

我的目标是一个简单的轮询系统,用户可以在其中创建民意调查问题,为民意调查提供一组选项(答案)并对每个民意调查进行投票。我将提供一组我需要收集的简单字段。然后,我将提供我的解决方案。你能告诉我我的解决方案是否可以接受吗?
所需字段: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])


这个查询也有意义吗?
提前致谢。

1 个答案:

答案 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”?在低赌注情况下,这可能不需要。)