我正在寻找意见。
我有一个人员列表,当他们出现在某个位置时需要存储,以便负责人可以从列表中查看它们。我不是100%确定需要多长时间,但我认为他们可能需要查看以前的出勤名单。
我的第一直觉是为每个日期添加一列,但这可能会导致许多列。我可以在每个人旁边存储一个日期列表:
“01/01 / 2012,01 / 15 / 2012,02 / 18/2012 - ”
可能会导致很长的进入。这似乎都不是一个好的选择。
如果有人对某种方法有任何建议或指导,请告诉我。感谢。
答案 0 :(得分:2)
复杂但非常干净的方法是
表“人”:
表“日期”:
表“出席率”:
然后用适当的日期填充数据库,并根据每个日期需要出席的人填写“出勤”表。
如上所述,实施起来很复杂,但它非常灵活 - 您可以拥有任意数量的日期和参与者;你可以原谅那些以编程方式参加特定日期的人;你可以将人们添加到群组......
答案 1 :(得分:1)
链接表。
一张人的表
一个班级表
一个表格将人与人联系起来。
所以你需要做的就是确定某个学生在特定课程的某个日期被预设:
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的所有人。
答案 2 :(得分:0)
创建一个由attendance
字段和person_id
字段组成的表“date_present
”。您不能使用字符串将其存储到列或长列表中; - )。
您可以使用Person
与Attendance
加入表格的查询。
答案 3 :(得分:0)
你的第一直觉会导致糟糕的桌面设计。你应该拥有一个单独的表来存储用户/位置/日期元组
e.g。
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:05在瓷坛前祈祷,然后在10分钟后返回派对。