【发布时间】:2015-12-26 22:56:54
【问题描述】:
前言:我正在开发一个应用程序,可以就多个主题对用户进行测验。我希望保留他们的进度历史记录,并能够轻松地向用户展示他们每个主题的进度的每日、每周和每月视图。
我的表的初始设计如下:
CREATE TABLE IF NOT EXISTS `user_topics` (
`ProgressID` int(11) NOT NULL,
`UserID` int(11) NOT NULL,
`TopicID` int(11) NOT NULL,
`Level` decimal(3,1) NOT NULL,
`TotalCorrect` int(11) NOT NULL,
`QuestionsAsked` int(11) NOT NULL,
`DateTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`ProgressID`)
)
我是否走在正确的道路上/如何检索我需要的数据以提供可展示的历史记录?
编辑:
我想显示一个以时间为比例和正确百分比的图表,这将在用户点击查看其主题的每月/每周进度时完成。我希望查看每个主题的每周/每月数据之间的加载时间非常透明。
是否应该在一次调用中检索数据(只需选择从日期 x 到现在的行)然后将其留给单个客户将数据组织成天/月等,然后呈现数据?
【问题讨论】:
-
您要检索什么样的数据?至于可观的历史,这取决于你。对于历史记录,每次保存用户统计信息时只需创建一个新行。记录此数据后,对于历史历史查询,请执行
WHERE UserID = '132' AND DateTime between now() - interval 7 day and now()之类的查询 - 当然,您需要根据需要进行扩展。 -
应该有另一个表,我认为progressID是外键
-
@paabobo 为什么需要它?
-
progressID 表示该表的 id,如果我在示例中让它自动递增,也许会更清楚。
-
拥有一个主键 auto_increment 总是一个好主意,这样你就不用担心唯一性了。仅当您想将数据与不适合 user_topics 表的记录关联时,使用 progressID 作为另一个表中的外键才有意义,例如由于一对多关系或多对-许多关系,但在这种情况下,您需要 2 个额外的表,一个用于关系,一个用于其他类型的数据。