Mysql 高效考勤管理系统的数据库模式

Mysql 高效考勤管理系统的数据库模式,mysql,database,database-design,architecture,schema,Mysql,Database,Database Design,Architecture,Schema,我正在为学校开发一个考勤系统,该系统将同时满足员工和学生的需求 当前数据库架构为 出勤率表 id - primary key for this table daydate int(11) - stores timestamp of current day timing_in varchar(18) - Start time for institution timing_out - Closing time for institution status - Status for the day,

我正在为学校开发一个考勤系统,该系统将同时满足员工和学生的需求

当前数据库架构为

出勤率

id - primary key for this table
daydate  int(11) - stores timestamp of current day
timing_in varchar(18) - Start time for institution
timing_out - Closing time for institution
status - Status for the day, can be working day - 1 or holiday - 2
然后有不同的教职员工和学生表,存储实际出勤值

对于员工,考勤存储在
考勤\u staff
中。数据库架构为

attendance_id - foreign key, references attendance table
staff_id - id of staff member, references staff master table
time_in - stores in timing of a staff member
time_out - stores out timing of a staff member
status - attendance status - can be one among the list, like present, absent, casual leave, half day, late mark, on duty, maternity leave, medical leave etc
对于工作人员,我将在表中存储“存在”和“不存在”条目

现在学生的出勤率必须包括在内

由于每天的状态已存储在
考勤表中
表中,我们是否可以在学生考勤表中不存储每个学生的当前值

与此类似,学生出勤表将只存储那些在特定日期不在场的日子的条目

考勤\u学生
的模式将为

attendance_id - references attendance table
student_id - references student table
status - will be leave / absent etc other than present.
使用外部联接从考勤表计算当前天数是否有效


提前感谢。

您不需要外部联接来计算学生的出勤率。您可以简单地计算出勤表中的记录(一次,因为所有学生都一样),然后从学生出勤表中进行选择以获得缺勤


如果你想通过外部加入来计算出席人数,你可以。如果您在考勤表主键和从学生考勤表到考勤表的外键上都有索引,那么它可能会非常高效。

谢谢Joel。目前的状态是否应该存储在数据库中,以及每个学生每天的状态。那我去年某个月某个学生的出勤率呢?如何检查,学生当时是否可以出席。他是否处于活动状态/非活动状态/暂停状态等。因为对于非活动学生,系统中将不提供考勤。@Ehs4n-如果是我,我将明确存储当前状态。我之所以这样做,是因为它可以区分学生在场和数据丢失。在记录出勤情况之前,你无法判断学生是否在场或出勤情况是否“待定”。对于历史数据,如果你在学生离开学校或新学年开始时清理出你的表,那么你可以考虑将另外一组历史档案表作为学年。与其删除离开的学生,不如将其存档。再次感谢您的见解。请您对存档功能进行更多说明。如何实现这一点?@ EHS4N-创建一组表,这些表是生产表的副本,但考虑每年添加一个额外的列。然后,不要只在学年结束时从生产表中删除数据,而是将该过程更改为首先将数据复制到存档表中,并在执行时设置“额外年份”列。然后在制作存档副本后从生产表中删除数据。并非每个存档表都需要“额外年份”列,只有那些尚未嵌入日期的表才需要。感谢您的宝贵建议。:)