我如何存储日期/考勤?


How can I store dates/attendance?

我在征求意见。

我有一份人员列表,当他们出现在某个位置时需要存储,以便负责人可以从列表中检查他们。我不能100%确定需要多长时间的日期,但我认为他们可能需要查看以前的出席名单。

我的第一直觉是每个日期有一列,但这可能会导致很多很多列。我可以在每个人旁边存储一个日期列表:

" 01/01/2012、01/15/2012 02/18/2012……"

可能导致很长的条目。似乎两者都不是一个好的选择。

如果有人对方法有建议或指导,请让我知道。谢谢。

一个复杂但也非常简洁的方法是

表"人":

  • id
  • <
  • 名称/gh>
表"日期":

  • id
  • …"日期"表需要的信息
表"上座率":

  • date_id(链接到"日期"表中的条目)
  • person_id(链接到"persons"表中的条目)
  • 出席(yes/no)

然后在数据库中填写相应的日期,并根据每个日期需要出席的人员填写"出席"表。

这是,如前所述,复杂的实现,但它是令人难以置信的灵活-你可以有任何数量的日期和与会者;你可以故意不让人们参加某个特定的约会;

链接表

一桌人

  • ID
  • <
  • 名称/gh>

一个类表

  • ID
  • <
  • 名称/gh>

一个表连接人到类到日期。

  • ID
  • personID
  • classID
  • cDate

所以你所需要做的就是确定哪些学生在某堂课的某个日期被预设:

SELECT *
FROM people p
LEFT JOIN peopletoclass ptc ON p.id = ptc.personid
LEFT join class c ON c.id = ptc.classid
WHERE ptc.cDate = '2011-11-07' AND c.id = '1';
上面(例如)将获得2011年11月7日id为1的所有人。

创建表" attendance ",包含一个person_id字段和一个date_present字段。您不能使用字符串;-)将其存储到列或长列表中。

那么您可以在连接表PersonAttendance的地方使用查询。

您的第一直觉将导致一个糟糕的表设计。你应该有一个单独的表来存储用户/位置/日期元组

userID   locationID   date
1       party          1/1/2011 00:00:00
1       bathroom       1/1/2011 00:05:00
1       party          1/1/2011 00:15:00

将显示用户#1参加了新年晚会,然后在12:05am去陶瓷祭坛前祈祷,然后在10分钟后返回晚会。