导读:错题本不是"记一道题"那么简单——怎么存、怎么归类、何时重做、做对几次能移除,每一步处理不好就是摆设。本文给出一套可落地的模型:两张表管数据、三维归类、连续做对闭环,附 SQL 与判定逻辑。
错题本第一原则:错题是过程数据。做错先记录,重做再更新,连续做对才移除,全程留痕。
CREATE TABLE wrong_question (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
student_id BIGINT NOT NULL,
question_id BIGINT NOT NULL,
subject_id INT NOT NULL,
wrong_reason VARCHAR(50) NOT NULL,
status TINYINT NOT NULL DEFAULT 0,
created_at DATETIME NOT NULL,
UNIQUE KEY uk_student_question (student_id, question_id)
);
CREATE TABLE wrong_review (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
wrong_id BIGINT NOT NULL,
review_result TINYINT NOT NULL,
reviewed_at DATETIME NOT NULL
);要点:唯一键保证同题只留一条记录,重做历史单独存明细,状态不删行。
只按知识点归类,重做时面对的仍是"同一堆题"。加两个维度:
按"学科 + 知识点 + 错误原因"聚合,能看出两类问题:某知识点反复错、某类原因高频。
SELECT q.subject_id, q.wrong_reason,
COUNT(*) AS wrong_cnt,
SUM(r.review_result) / COUNT(r.id) AS pass_rate
FROM wrong_question q
LEFT JOIN wrong_review r ON r.wrong_id = q.id
WHERE q.status != 2
GROUP BY q.subject_id, q.wrong_reason
HAVING wrong_cnt >= 3 AND pass_rate < 0.5;要点:每题打"知识点 + 错误原因"两个标签,重做统计按维度聚合,薄弱点分析才可信。
function handleReview(wrong, result) {
saveReview({ wrongId: wrong.id, reviewResult: result, reviewedAt: now });
if (result === 1) {
wrong.consecutivePass++;
if (wrong.consecutivePass >= 2) { wrong.status = 1; }
else { wrong.nextReviewAt = calcNext(wrong, 3); }
} else {
wrong.wrongCount++;
wrong.consecutivePass = 0;
wrong.nextReviewAt = calcNext(wrong, 1);
}
saveWrong(wrong);
}要点:状态机必须有明确条件(连续做对两次),避免蒙对一次就移除。
错题本按「主表 + 明细表 → 三维归类 → 间隔重做 → 连续做对闭环」落地,状态机管流转、聚合管分析。同类分层在乔拓云教育系统的错题本模块中有对应实现,可按这套模型直接起步。
错题本的核心不是"存题",而是"让错题流动起来"。按这套模型落地,才能被真正用起来。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。