База данных расписания (базовое расписание + исключения)

В настоящее время расписание наших сотрудников для ~ 800 сотрудников в компании, работающей круглосуточно и без выходных, обрабатывается с помощью рабочих книг Excel. Мне нужно перенести все расписания в базу данных сотрудников Access, которую я разработал, которую мы используем в течение многих лет. (ПРИМЕЧАНИЕ: я знаю, что Access - не идеальная платформа для этого, но это то, что у меня есть.)

У каждого сотрудника есть базовое расписание, например, начало в 2 часа ночи со средой / четвергом выходной. График сотрудника на любую неделю будет его базовым графиком, измененным за счет таких исключений, как:

  • Запросы о перерывах в работе
  • Переключение смены с другим сотрудником в течение дня
  • Отпуска (по сути, другая форма перерыва)
  • Изменения в расписании, основанные на потребностях компании, сделанные администратором расписания

База данных должна только хранить базовое расписание и каким-то образом отображать расписание на заданную неделю. Он не нуждается в какой-либо сложной логике, такой как планирование на основе доступности.

Я вижу несколько способов реализовать это. Первым, что пришло мне в голову, было сохранение базового расписания, а затем динамическое создание расписания на заданную неделю по мере необходимости путем объединения базового расписания с таблицами на основе вышеуказанных исключений (время отдыха, переключение и т. Д.). Однако я не вижу, как сохранить базовое расписание и как объединить базовое расписание с исключениями для создания расписания. Я бы подумал, что это таблица вроде baseSchedule (PKScheduleID, FKEmployeeID, DayOfWeek, StartTime), но я не уверен.

Другой метод - создание недельных расписаний в таблице, например, с использованием описанного метода «трех столов Kimball Star» здесь: http://www.damirsystems.com/?p=466 . По сути, он создает таблицу с датами и имеет отношение «многие ко многим» с сотрудниками для определения расписания. Мне не нравится этот метод по многим причинам, таким как необходимость проверять / изменять эту таблицу на уровне приложения каждый раз, когда добавляется перерыв и т. Д., А также необходимость «генерировать» новое расписание в таблице. Кроме того, возможно, что количество сотрудников увеличится до 2 000+, и я боюсь, что плохой Access взорвется огненным шаром, имея рекорд для каждого сотрудника за каждый день.

Есть ли у кого-нибудь какие-либо дизайнерские идеи для реализации метода базового расписания + модификаторы ? Я бы хотел создавать расписания на лету, используя только запросы, но при необходимости я могу использовать VBA.

Спасибо

Редактировать 19.08.11 16:30: Я думаю, что я собираюсь пойти с чем-то очень похожим на ответ bluefeet. Ниже приведен дизайн, который я скопировал в пустой базе данных:

Design

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

Для форм и отчетов уровня приложения я вставлю базовое расписание в набор записей с очень небрежным запросом, который выводит что-то вроде:

Name  Mon     Tue     Wed     Thu     Fri     Sat     Sun
Alice 6:00 PM 6:00 PM Off     Off     2:00 PM 2:00 PM 2:00 PM
Bob   4:00 PM 4:00 PM 4:00 PM 4:00 PM Off     Off     4:00 PM 

Затем в VBA я также извлечу исключения для диапазона дат (неделя) в набор записей. Я буду перебирать набор записей исключений, изменяя базовый набор записей (сверху) по ходу. Затем я настрою форму / отчет на использование измененного набора записей. Это немного неэлегантно, но справится со своей задачей достаточно хорошо.

Если у кого-нибудь есть идеи, как объединить таблицы Base и Exceptions с выводом, аналогичным приведенному выше, используя только запросы и не VBA, пожалуйста, дайте мне знать.

Еще раз спасибо

8
задан Banjoe 19 August 2011 в 23:50
поделиться