数据库设计:每次提交数据多次写入or每次读取数据时做统计?

要做一个“洗碗大作战”的小app,其实就是简单记录和统计全家人洗碗次数。

大概有三个页面:
成员列表-所有成员的姓名、头像列表;
XX的战果-点击成员列表项进入该页面,有三个折线图,分别是该成员历史周、月、年的洗碗次数;
团队排名-当前周、当前月和当前年中,所有成员洗碗次数排名。

mysql数据库打算这样设计:
一个存储成员资料:id, name, avatar, password, enter-time
另一个存储洗碗记录: id, date (每条记录表示编号为id的用户在日期date洗过一次碗)

但是这样每次调取洗碗次数的时候(xx的战果页面,或者团队排名),需要对第二个表进行筛选和统计。

还有一个设计方案是,
存储成员资料的表:id, name, avatar, week(本周次数), month(本月次数), year(当年次数), password, enter-time
存储历史周洗碗次数:id, week(哪一周), count(次数)
存储历史月洗碗次数:id, month, count
存储历史年洗碗次数:id, year, count

这第二种办法,读取数据的时候直接取相应的count,或者其他存“次数”的字段就可以了。
但更新洗碗记录的时候必须将第一个表中week, month, year、其他表中当前一周(月/年)的count,全部更新,每隔一段时间还必须做“清零”和“历史数据入库”的工作。

两种办法哪个更好呢?或者有没有更好的设计办法?如果用mongodb的话会有什么区别吗?

存储历史周洗碗次数:id, week(哪一周), count(次数)
这个就可以啦,剩下的月和年通过计算就可以自己得出。

  1. 根据日期计算出当前周信息找到匹配的周记录,如有更新掉没有添加

  2. 历史月/年数据定期归档,这部分数据是不变化

  • 数据库中的历史数据的处理问题
  • 图中红框内数据库关联符号是什么意思?
  • 关于锁表、锁行、分表、分库、读写分离、数据同步
  • 数据库外键大家用的多吗?
  • mysql开发数据库命名规范问题
  • 求助:“/”应用程序中的服务器错误。
  • 关于sqlite以及pyqt的使用问题
  • mongoose怎么匹配到原有文档
  • php如何显示session的内容
  • 如何优化非常长的字符串的子串查找?
  • mysql数据库每次查询是一条线程吗?