Skip to content
由魔法生成的目录

M3.2

任务描述

「奈斯!」bLue 说道。

「等等,这样就结束了吗?」你问道。

「嗯…是时候启用数据库了。」bLue 喃喃自语道。

任务要求

你需要实现一个后端程序,和之前一样提供查询选手信息和 rating 记录的 HTTP 服务。但你需要使用真正的关系型数据库进行持久化存储和数据交互。

在这里,请使用轻量的关系型数据库 SQLite。你需要建立一个数据库 cf(数据库文件名为 cf.db)并建立两张数据表 user_infouser_rating,其表结构如下所示。

user_info

字段名类型约束说明
handleVARCHAR主键,非空选手的 handle
ratingINT选手的当前 rating
rankVARCHAR选手的当前 rank
updated_atDATETIME非空爬取时间

user_rating

字段名类型约束说明
user_rating_idINT主键,递增,非空自动递增的 ID
handleVARCHAR外键 user_info.handle,非空选手的 handle
contest_idINT非空比赛 ID
contest_nameVARCHAR非空比赛名称
rankINT非空选手在此比赛取得的 rank
old_ratingINT非空选手在此比赛前的 rating
new_ratingINT非空选手在此比赛后的 rating
rating_updated_atDATETIME非空rating 更新时间
updated_atDATETIME非空爬取时间

TIP

对于 user_rating 表,每一行数据表示一条具体比赛的 rating 记录,因此当你爬取到一位选手的 rating 记录时,可能会插入/更新多条数据。

为测试方便,所有数据的有效期均为 30 秒。当数据过期时,你应当重新爬取并更新数据到对应的数据表。

请求格式和示例

同 M3.1。

建议完成用时

1-2 天。

自学参考资料关键词

  • 数据库
  • SQLite

总结回顾检查点

  1. 什么是关系型数据库?
  2. SQLite 中有哪些数据类型?
  3. 什么是主键、外键?
  4. 查询、更新、删除数据的 SQL 语句分别是什么?

进阶思考题

  1. 试一试:在一条 SQL 中查询指定选手的信息及其所有 rating 记录。

由三位创世大魔法使共同写成,作为世界树记忆被封存并藉由元素脉络传播至全宇宙。