手记

如果设计一个app答题小程序的后台

先说需求

  1. 每天下发一道题,如果用户今天答了题,那么当天只下发今天答的那道题

  2. 如果用户今天没答题(标记为题目1),那么明天也下发这道题目1

  3. 当用户答了6道题以上,需要告诉用户他在所有用户中的排名

  4. 当所有题目都答完了,需要告诉用户展示一个答完了所有题目的界面


这种情况下我们要设计三张表:

一张是用户操作的表,记录用户都答了哪道题 ,表1

 uid,question_id,sort(表示题目的排列顺序),answer,option

一张是题目表,所有的题目都这里,表2

Question_id,title,option 

一张是记录用户最后答哪道,表3

Uid,question_id,sort,correct_count,total_count,is_correct

我们要提供三个API

第一个API是下发今日的题目:

获取今日题目,我们从表3中把这个uid中的sort找到

判断时间,如果是最后答题的是今天,那么就继续下发这道题,type=1

如果答题不是今天,那么就要下发新题,去表2中找到sort+1的那倒下发

第二个API是获取答题历史

从表1中查找uid有多少条数据,查到了就下发 

第三个API用户答了一道题,返回给用户告诉他正不正确,还有下发排名

这个情况我们去查表2,看这道题的答案正不正确,然后去表3中去查出排名发给用户

表的sql:

CREATE TABLE `pregnancy_two`.`PregExamineQuestion` (

`id` INT ( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增主键',

`title` VARCHAR ( 512 ) COLLATE latin1_bin NOT NULL DEFAULT '' COMMENT '问题标题',

`options` VARCHAR ( 512 ) COLLATE latin1_bin NOT NULL DEFAULT '' COMMENT '问题选项JSON',

`answer` TINYINT ( 3 ) UNSIGNED NOT NULL DEFAULT '1' COMMENT '问题答案序号',

`knowledge_id` INT ( 11 ) UNSIGNED NOT NULL DEFAULT '0' COMMENT '知识ID',

`explain` VARCHAR ( 512 ) COLLATE latin1_bin NOT NULL DEFAULT '' COMMENT '解释',

`sort` INT ( 10 ) UNSIGNED NOT NULL DEFAULT '0' COMMENT '题目展示顺序ASC',

`status` TINYINT ( 3 ) UNSIGNED NOT NULL DEFAULT '0' COMMENT '状态:0-正常状态、1-删除状态',

`create_ts` INT ( 11 ) UNSIGNED NOT NULL DEFAULT '0' COMMENT '创建时间戳',

`update_ts` INT ( 11 ) UNSIGNED NOT NULL DEFAULT '0' COMMENT '更新时间戳',

PRIMARY KEY ( `id` ),

KEY `IDX_status_sort` ( `status`, `sort` ) 

) ENGINE = INNODB DEFAULT CHARSET = latin1 COLLATE = latin1_bin COMMENT = '每日备孕小测试题目表';


CREATE TABLE `pregnancy_two`.`PregExamineUser` (

`user_id` INT ( 11 ) UNSIGNED NOT NULL COMMENT '用户ID',

`correct` INT ( 11 ) UNSIGNED NOT NULL DEFAULT '0' COMMENT '正确作答总数',

`total` INT ( 11 ) UNSIGNED NOT NULL DEFAULT '0' COMMENT '作答中总数',

`percent` TINYINT ( 3 ) UNSIGNED NOT NULL DEFAULT '0' COMMENT '作答正确率',

`question_id` INT ( 11 ) UNSIGNED NOT NULL DEFAULT '0' COMMENT '最近一次作答题目ID',

`last_ts` INT ( 11 ) UNSIGNED NOT NULL DEFAULT '0' COMMENT '最近一次作答时间',

`create_ts` INT ( 11 ) UNSIGNED NOT NULL DEFAULT '0' COMMENT '创建时间戳',

`update_ts` INT ( 11 ) UNSIGNED NOT NULL DEFAULT '0' COMMENT '更新时间戳',

PRIMARY KEY ( `user_id` ),

KEY `IDX_percent_total_ts` ( `percent`, `total`, `update_ts` ) 

) ENGINE = INNODB DEFAULT CHARSET = latin1 COMMENT = '每日备孕小测试用户表';


CREATE TABLE `pregnancy_two`.`PregExamineDetail` (

`user_id` INT ( 11 ) UNSIGNED NOT NULL DEFAULT '0' COMMENT '用户ID',

`question_id` INT ( 11 ) UNSIGNED NOT NULL DEFAULT '0' COMMENT '题目ID',

`option` TINYINT ( 3 ) UNSIGNED NOT NULL DEFAULT '1' COMMENT '选择的答案(序号)',

`is_correct` TINYINT ( 3 ) UNSIGNED NOT NULL DEFAULT '0' COMMENT '是否正确:0-错误、1-正确',

`create_ts` INT ( 11 ) UNSIGNED NOT NULL DEFAULT '0' COMMENT '创建时间戳',

`update_ts` INT ( 11 ) UNSIGNED NOT NULL DEFAULT '0' COMMENT '更新时间戳',

PRIMARY KEY ( `user_id`, `question_id` ) 

) ENGINE = INNODB DEFAULT CHARSET = latin1 COMMENT = '每日备孕小测试明细表';



1人推荐
随时随地看视频
慕课网APP