发表于: 2019-10-27 22:51:29
1 921
今天完成的事情:(一定要写非常细致的内容,比如说学会了盒子模型,了解了Margin)
1、思考签到方案
明天计划的事情:(一定要写非常细致的内容)
1、完成其他方案
遇到的问题:(遇到什么困难,怎么解决的)
收获:(通过今天的学习,学到了什么知识)
需求描述:
- 点击签到
- 连续签到1天加1分、连续签到2-4天加3分、连续签到5-6天加5分、连续签到7天及以上加7分
- 显示已连续签到天数
- 显示历史最高签到天数
重点在于 签到 数据库的设计
方案1:
- 用户表中有两个列标签:已连续签到天数 和 历史最高签到天数
- 签到表中主要有 用户id列、签到时间列两个列标签 ,用户每次签到都插入一条新的数据,
- 进入个人页面将进行一次判断,有无前一天的签到时间,有的话显示已连续签到天数;无的话已连续签到天数改为0 并显示
- 点击签到 已连续签到天数加一
- 点击签到后 判断当前 已连续签到天数 与历史最高签到天数大小关系,保持 已连续签到天数小于等于 历史最高签到天数即可
缺点:
- 后期数据库中数据量巨大
- 给前端返回当月签到数据较慢
- 连续签到处理慢,需要搜索有无前一天的签到记录。
优点:
- 已连续签到 方便判断
方案2:
- 用户表中有两个列标签:已连续签到天数 和 历史最高签到天数
- 签到表中主要有 用户id列、当前年份列(可以去掉 每年清楚一次签到数据)、12列每月签到信息列
- 每月签到信息列中使用对应月天数长度的“1”和“0”表示当月签到信息,比如1月列有31位 “0”和“1”组成的数字,然后第一位是“1”就代表1号签到了
- 进入个人页面将进行一次判断,前一天那一位是“0”还是“1”,“1”的话显示已连续签到天数;“0”的话已连续签到天数改为0 并显示,例如今天是8月18日,就找到8月列中第18位的数字判断是“0”还是“1”
- 点击签到 已连续签到天数加一,将对应月中的对应位数的“0”改为“1”
- 点击签到后 判断当前 已连续签到天数 与历史最高签到天数大小关系,保持 已连续签到天数小于等于 历史最高签到天数即可
缺点:
- 前期数据库中数据量较大,不过后期增长慢,或不增长
优点:
- 签到数据容易定位,处理较快
- 给前端返回当月签到数据也很快
方案3:
- 基本和方案2相同,
- 在签到表的设计中将每月的签到信息改为 Json 字符串为 日期:是否签到,如:“{“11”:“0”}”表示 11日没有签到
- 取出时可以序列化为一个每月签到信息 对象然后在进行判断。
缺点:
- 前期数据库中数据量较大,不过后期增长慢,或不增长
- json字符串格式可能会出现问题
优点
- 处理快,方便。
评论