【发布时间】:2019-01-12 02:16:11
【问题描述】:
我正在存储记录用户是否记录了他们在给定日期的出勤情况的数据。有些日子并不重要(节假日、周末),因此也将这些日子存储起来。
两个要求是:
- 可以快速计算日志和丢失日志的数量,并且
- 每当添加新用户时,该结构都是可扩展的。
现在,我似乎面临着两种数据存储方式的选择,每一种都有自己的优点/缺点:
选项 1:两个表
Table calendar - 不计算的跟踪天数
date | log |
-----------+-----|
2019-01-10 | DNL | // "Do Not Log" - holiday etc.
2019-01-12 | NB | // "Non-business day"
2019-01-13 | NB |
Table logs - 跟踪成功的考勤日志
user_id | date |
--------+------------|
1 | 2019-01-08 |
1 | 2019-01-09 |
2 | 2019-01-09 |
// It's implied that user #2 missed their log on Jan. 8
优点:
- 数据得到有效存储。
- 统计用户日志和不计算天数很简单。
挑战:
- 不知道错过了多少天。
选项 2:一张桌子(我尝试过的)
Table calendar - 跟踪日志和要计算和未计算的天数
date | user_id | log |
2018-01-09 | 1 | 1 | // Counted, logged
2019-01-10 | 1 | DNL | // Not counted
2019-01-11 | 1 | NB | // Not counted
2019-01-09 | 2 | NULL | // Counted, missed log
优点:
- 错过的天数与记录的天数是微不足道的(用于计算总体百分比)。日历中的天数是明确的。
挑战:
- 在日历中添加新条目很棘手,如果:
- 日历变长了。
- 添加了新用户。
- 表有间隙(
log==NULL),使得遍历速度比选项 1 慢。
我的问题是:有没有办法使用选项 1 并以某种方式对丢失日志的数量进行编码,或者是否有其他方式来存储满足这两个要求的数据?我尝试过使用选项 2,尽管扩展已成为一个相当大的挑战。提前感谢您的任何建议。
【问题讨论】:
-
“有些日子是不重要的(节假日、周末),所以也会存储这些日子”。你的意思是“重要”吗?他们在哪里“记录他们的出勤率”?在另一个数据库中?您应该能够对此进行查询。