我在征求意见。
我有一份人员列表,当他们出现在某个位置时需要存储,以便负责人可以从列表中检查他们。我不能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
字段。您不能使用字符串;-)将其存储到列或长列表中。
那么您可以在连接表Person
和Attendance
的地方使用查询。
您的第一直觉将导致一个糟糕的表设计。你应该有一个单独的表来存储用户/位置/日期元组
。
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分钟后返回晚会。