发表于: 2019-10-27 22:51:29

1 921


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



返回列表 返回列表
评论

    分享到