要做一个“洗碗大作战”的小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(次数)
这个就可以啦,剩下的月和年通过计算就可以自己得出。
根据日期计算出当前周信息找到匹配的周记录,如有更新掉没有添加
历史月/年数据定期归档,这部分数据是不变化