51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

学而思的竞赛教练需要设计用户学习记录表(记录学生做过的题目、正确率、用时),以及题目表(题目内容、难度、知识点),请设计数据库表结构,并说明如何保证学习记录与题目数据的一致性(如学生提交答案后,学习记录及时更新)。

学而思竞赛教练(C++)难度:中等

答案

1) 【一句话结论】:采用关系型数据库设计,通过题目表与学习记录表的外键关联,并利用数据库事务(ACID特性)保证学生提交后学习记录及时、一致地更新,确保数据完整性。

2) 【原理/概念讲解】:数据库表设计需遵循关系模型,核心是“实体-关系”映射。

  • 题目表作为“实体”存储题目信息(主键:题目ID,自增),字段包括题目内容、难度、知识点等。
  • 学习记录表作为“关联实体”,存储学生答题记录(主键:记录ID,自增),字段包括学生ID、题目ID(外键关联题目表)、正确率、用时、提交时间等。
  • 外键约束:学习记录表中的“题目ID”引用题目表的主键,确保每条学习记录对应唯一题目,避免数据冗余或关联错误。
  • 事务(原子操作):当学生提交答案时,系统执行“插入学习记录”+“更新题目正确率(可选)”的原子操作,事务的“提交”确保所有步骤要么全部完成,要么全部回滚,避免中间状态不一致。
    类比:就像超市结账,顾客付款后,订单和库存同时更新,事务保证要么都成功,要么都不变,防止“已付款但商品未出库”的异常。

3) 【对比与适用场景】:

设计策略定义特性使用场景注意点
外键约束(级联更新/删除)学习记录表题目ID引用题目表主键,设置级联自动同步题目变更(如难度调整)需要题目信息实时同步避免级联删除导致记录丢失
事务(原子操作)将提交答案的多个步骤(插入记录、更新统计)封装为事务确保数据一致性,防止并发冲突高并发场景(如多人同时答题)选择合适的隔离级别(如读已提交)
时间戳字段学习记录表添加提交时间(TIMESTAMP)记录操作时间,便于审计需要追踪答题时间确保时间同步(如NTP)

4) 【示例】:以MySQL为例,表结构及操作:

-- 题目表
CREATE TABLE题目表 (
    题目ID INT PRIMARY KEY AUTO_INCREMENT,
    题目内容 VARCHAR(255) NOT NULL,
    难度 INT CHECK (难度 BETWEEN 1 AND 5),
    知识点 VARCHAR(100)
);

-- 学习记录表
CREATE TABLE学习记录表 (
    记录ID INT PRIMARY KEY AUTO_INCREMENT,
    学生ID INT NOT NULL,
    题目ID INT NOT NULL,
    正确率 FLOAT(2,1),
    用时 INT, -- 单位:秒
    提交时间 TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (题目ID) REFERENCES 题目表(题目ID) ON DELETE RESTRICT
);

-- 提交答案的原子操作(事务)
BEGIN TRANSACTION;
INSERT INTO 学习记录表 (学生ID, 题目ID, 正确率, 用时) 
VALUES (1, 1, 1.0, 30); -- 假设正确且用时30秒
COMMIT;

解释:事务确保插入记录后,若后续有更新题目正确率的逻辑(如统计班级平均正确率),也能原子执行,避免中间状态不一致。

5) 【面试口播版答案】:(约90秒)
“面试官您好,针对用户学习记录和题目数据的设计,我建议采用关系型数据库,核心是两表关联并利用事务保证一致性。首先,题目表存储题目信息(主键题目ID,包含内容、难度、知识点),学习记录表存储学生答题记录(主键记录ID,外键题目ID关联题目表,字段有学生ID、正确率、用时、提交时间)。通过外键约束确保每条学习记录对应唯一题目,避免数据冗余或错误。当学生提交答案时,系统执行原子事务:先插入学习记录,再(可选)更新题目表中的正确率统计(如班级平均正确率),事务的提交保证所有步骤要么全部完成,要么全部回滚,比如如果插入记录失败,整个操作不生效,确保数据一致性。这样既保证了学习记录及时更新,又防止题目数据因并发操作出现异常。”

6) 【追问清单】:

  • 问:外键约束具体如何实现?比如题目ID重复或为空时如何处理?
    回答要点:题目表题目ID设为主键自增,学习记录表题目ID设为外键,引用题目表主键,同时设置检查约束(如题目ID > 0),防止插入无效ID;题目ID为空时插入失败,避免关联错误。
  • 问:如何处理高并发下的数据一致性?比如多个学生同时提交答案?
    回答要点:使用数据库事务的隔离级别(如读已提交),结合乐观锁或悲观锁(如悲观锁加锁题目表或学习记录表,确保同一时间只有一个事务操作,避免脏读、不可重复读;乐观锁通过版本号,在更新时检查版本是否一致,减少锁竞争)。
  • 问:如果题目被删除,学习记录表中的题目ID还能关联吗?
    回答要点:外键约束可设置ON DELETE RESTRICT(禁止删除关联的记录)或ON DELETE CASCADE(级联删除学习记录),根据业务需求选择,比如题目被删除时,学习记录也删除(若题目已作废),或禁止删除(若题目仍有效)。
  • 问:正确率计算逻辑如何保证准确?比如班级平均正确率?
    回答要点:在题目表或学习记录表中添加统计字段(如班级正确率),通过触发器或定时任务(如每天凌晨)计算所有该题目学习记录的正确率平均值,并更新题目表中的统计字段,确保数据准确。

7) 【常见坑/雷区】:

  • 外键未设置或约束弱:导致学习记录表题目ID为空或关联无效题目,数据不一致。
  • 事务未使用:学生提交后,学习记录插入成功但正确率未更新,或插入失败导致数据丢失。
  • 时间戳字段缺失:无法记录提交时间,审计或分析答题效率时无依据。
  • 正确率计算逻辑错误:比如未考虑答题次数(如只算正确次数,忽略错误次数),导致统计偏差。
  • 并发处理不当:高并发下多个事务同时更新题目正确率,导致统计结果错误(如重复计算或遗漏)。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1