动手实现一个单词本(数据库设计)| 青训营笔记

463 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 12 天

  1. 数据库需要存储单词的翻译信息,比如单词本身、单词的音标、单词的近义词、反义词、例句等,这些信息是通过翻译API获取到的。因此下定义一个translations数据表,用于保存单词的翻译信息等。由于单词的翻译信息只需要在访问此单词的时候需要全部提取出来,不需要单独提取其中某一项内容,因而除了将单词本身(word)和翻译接口(api)作为表translations的键外,其余的内容均通过json格式存储和提取。数据库的生成代码如下:
CREATE TABLE `translations` (
  `word` varchar(50) COLLATE utf8mb4_general_ci NOT NULL,
  `api` varchar(50) COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'caiyun',
  `json` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
  1. 除上述需求外,数据库还要存储收集单词的过程中单词的语境信息,方便加深对单词的理解和对文献的熟悉。因此需要创建一个words表,用于存储单词的语境信息,包含的字段有index(索引),word(单词),sentence(单词在文中的句子),paper(单词的出处,是哪篇文章),coll_date(单词的收录时间),period(单词的复习模式),next(单词的下一个复习周期),review_date(单词的复习时间,通过每天定时运行的python脚本来实现review_date的更新。计算当前日期和单词收录日期的差值,比对复习模式period,得到未来最近一次的复习时间,储存到数据库)。sql生成语句如下:
CREATE TABLE `words` (
  `index` int NOT NULL,
  `word` varchar(50) COLLATE utf8mb4_general_ci NOT NULL,
  `sentence` varchar(500) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `paper` varchar(200) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `coll_date` date NOT NULL COMMENT 'collect date',
  `period` varchar(30) COLLATE utf8mb4_general_ci NOT NULL COMMENT 'period type',
  `next` int NOT NULL DEFAULT '0' COMMENT 'the next period',
  `review_date` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
  1. 对于 words 表中提及的复习模式,定义了一个复习周期种类的表,名为period_type。第一个字段为period名称,也是表格的主键,第二个字段为counts,表示这种类型的学习周期分为几个复习阶段,后面的7个字段分别对应每个复习阶段分别对应第几天。即给定count,后面7个字段中的前count个字段是有效的,其余的是无效的。数据库的生成代码如下:
CREATE TABLE `period_type` (
  `period` varchar(30) COLLATE utf8mb4_general_ci NOT NULL,
  `counts` int NOT NULL,
  `period_1` int DEFAULT NULL,
  `period_2` int DEFAULT NULL,
  `period_3` int DEFAULT NULL,
  `period_4` int DEFAULT NULL,
  `period_5` int DEFAULT NULL,
  `period_6` int DEFAULT NULL,
  `period_7` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
  1. 至此,数据库设计已初步完成,根据此数据库的结构可以实现的功能有:
  • 存储单词,单词的上下文信息,
  • 根据复习模式自动安排单词的复习时间(未来的哪些天安排复习)
  • 复习单词的过程中,可以看到之前遇到单词的语境(单词所在的文章,单词所在的句子等)
  • 在单词翻译信息中存入单词发音的存储路径,可以在网页端实现单词的发音