В настоящее время расписание наших сотрудников для ~ 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. Ниже приведен дизайн, который я скопировал в пустой базе данных:
Каждый сотрудник будет иметь запись в базовой таблице для каждого дня недели с указанием времени начала и количества часов, на которые он должен работать. Также есть таблица исключений, в которой перечислены изменения в расписании с указанием даты, сотрудника и его новой смены.
Для форм и отчетов уровня приложения я вставлю базовое расписание в набор записей с очень небрежным запросом, который выводит что-то вроде:
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, пожалуйста, дайте мне знать.
Еще раз спасибо