2012-12-31 2 views
4

Я разрабатываю систему посещаемости школы, которая будет обслуживать как сотрудников, так и студентов.Схема базы данных для эффективной системы управления посещаемости

Текущая схема дб

attendance стол

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 

Затем существуют различные столы для персонала & студентов, которые хранят фактические значения посещаемости.

Для персонала, посещаемость хранится в attendance_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 

Для персонала я храню как настоящие, так и нет записи в таблице.

Теперь участие студентов должно быть включено в него.

Поскольку статус каждого дня уже сохранен в таблице attendance, можем ли мы хранить нецензурные значения для каждого учащегося в таблице посещаемости учащихся.

Как, таблица посещаемости учащихся будет хранить только записи для тех дней, которые не присутствуют в определенный день.

Схема для attendance_student будет

attendance_id - references attendance table 
student_id - references student table 
status - will be leave/absent etc other than present. 

Будет ли это эффективно рассчитать нынешние дни из таблицы посещаемости с помощью внешнего соединения ??

Заранее спасибо.

ответ

2

Вам не требуется внешнее соединение для расчета посещаемости для студентов. Вы можете просто подсчитать записи в таблице посещаемости (один раз, так как это будет одинаково для всех учеников), а затем просто выберите из таблицы посещаемости учащихся, чтобы получить отсутствие.

Если вы предпочитаете считать посещаемость внешним соединением, вы можете. Вероятно, он будет более чем достаточно эффективным, если у вас есть индекс первичного ключа таблицы посещаемости и внешнего ключа из таблицы посещаемости учащихся в таблицу посещаемости.

+0

Спасибо, Джоэл. Если статус настоящего также хранится в базе данных также для каждого ученика за каждый день. Как насчет того, чтобы в прошлом году я посещал конкретный студент? Как это можно проверить, был ли ученик доступен для посещения в то время или нет. Был ли он активным/неактивным/приостановленным и т. Д. Потому что для неактивных студентов посещаемость не будет доступна в системе. – Ehs4n

+1

@ Ehs4n - Если бы это был я, я бы точно хранил _present_. Я бы сделал это, потому что он отличал бы присутствующих студентов и отсутствующих данных. Пока регистрация не будет записана, вы не можете определить, присутствует ли учащийся, или если посещаемость «будет определена». Для исторических данных, если вы очищаете любую из своих таблиц, когда ученики покидают школу или начинается новый учебный год, вы можете рассмотреть возможность хранения дополнительного набора исторических архивных таблиц, которые включают в себя учебный год в качестве дополнительного поля. Вместо того, чтобы удалить студентов, которые уходят, архивируйте их вместо этого. –

+0

Еще раз спасибо за понимание. Будете ли вы бросить больше света на функцию архива. Как это можно достичь? – Ehs4n

Смежные вопросы