В настоящее время планирование наших сотрудников для ~ 800 сотрудников в компании, работающей круглосуточно и без выходных, выполняется с помощью рабочих книг Excel. Мне нужно перенести все расписания в базу данных сотрудников Access, которую я разработал и которую мы используем годами. (ПРИМЕЧАНИЕ: я знаю, что Access не идеальная платформа для этого, но это то, что у меня есть.)
У каждого сотрудника есть базовое расписание, такое как время начала работы 2:00 с выключенным чтением. Расписание работника на любую неделю будет его базовым расписанием, измененным такими исключениями, как:
- Запросы на отключение
- Переключение смены с другим сотрудником на день
- Листья отсутствия (в основном другая форма отдыха)
- Изменения в расписании в зависимости от потребностей компании, сделанные администратором планирования
База данных должна хранить только базовое расписание и каким-то образом отображать расписание на данную неделю. Для не требуется какая-либо продвинутая логика, например планирование, основанное на доступности.
Я вижу несколько способов реализовать это. Первым, что мне пришло в голову, было сохранение базового расписания, а затем динамическая генерация расписания на данную неделю по мере необходимости путем объединения базового расписания с таблицами на основе вышеупомянутых исключений (отключение, переключатели и т. Д.). Тем не менее, я не вижу, как сохранить базовое расписание и как объединить базу с исключениями для создания расписания. Я думаю, что таблица, как baseSchedule (PKScheduleID, FKEmployeeID, DayOfWeek, StartTime), но я не уверен.
Другим методом было бы создание еженедельных расписаний в таблице, например, с использованием описанного здесь метода «Kimball Star» с тремя таблицами: http://www.damirsystems.com/?p=466. По сути, он создает таблицу, полную дат, и содержит множество много отношений с сотрудниками, чтобы определить график. Мне не нравится этот метод по многим причинам, таким как необходимость проверять / изменять эту таблицу на уровне приложения каждый раз, когда добавляется время, и т. Д., А также необходимость «генерировать» новое расписание в таблице. Кроме того, возможно, что это увеличится до 2000+ сотрудников, и я боюсь, что плохой Access взорвется шаром пламени, имеющим рекорд для каждого сотрудника на каждый день.
У кого-нибудь есть идеи по реализации метода базового расписания + модификаторов? Я хотел бы создавать расписания на лету только с запросами, но при необходимости могу использовать VBA.
Спасибо
Редактировать 19.08.11 16:30:
Я думаю, что я собираюсь пойти с чем-то очень похожим на ответ bluefeet. Ниже приведен дизайн, который я смоделировал в пустой БД:
![Design](https://i.stack.imgur.com/gdgfy.jpg)
Каждый сотрудник будет иметь запись в Базовой таблице для каждого дня недели с указанием времени начала и количества часов, которые они запланированы для работы. Также есть таблица исключений, в которой перечислены изменения в расписании с указанием даты, сотрудника и его новой смены.
Для форм и отчетов уровня приложений я перетяну расписание base в набор записей с очень небрежным запросом, который выдает что-то вроде:
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, пожалуйста, дайте мне знать.
Еще раз спасибо