База данных планирования (базовое расписание + исключения) - PullRequest
8 голосов
/ 19 августа 2011

В настоящее время планирование наших сотрудников для ~ 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

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

Для форм и отчетов уровня приложений я перетяну расписание 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, пожалуйста, дайте мне знать.

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

Ответы [ 2 ]

2 голосов
/ 20 августа 2011

Мое предложение будет иметь базовую таблицу с расписаниями сотрудников, а затем таблицу с исключениями. У меня есть нечто подобное в приложении Календарь. У меня есть таблица Employee, которая содержит их обычные графики, затем у меня есть отдельная таблица, в которой содержатся исключения - выходные, досрочный отпуск, обучение и т. Д.

EmployeeTable
PK - EmployeeID
EmployeeName
Schedule fields - starttime, endtime, days, etc

Employee_ExceptionTable
PK - EmployeeId
ExceptionTypeId
PK - ExceptionStartDate
ExceptionEndDate

ExceptionTypeTable
ExceptionTypeId
ExceptionName - Vacation, Leave Early, Training

Поскольку Employee_ExceptionTable имеет ключ EmployeeId и ExceptionStartDate, это будет разрешать только одно исключение в день, но это исключения из базового расписания. Как я уже сказал, у меня есть что-то похожее в моем приложении, которое отслеживает около 100 человек, и это, кажется, работает. Это может быть отправной точкой для вас.

0 голосов
/ 20 августа 2011

Я думаю, это один из способов сделать это:
У вас есть 3 таблицы:
сотрудников (employee_id PK), планировщик (employee_id FK) и timeOff (идентификатор сотрудника FK)

планировщик
дата
employee_id (таблица FK сотрудников)
start_time
end_time
day_off
комментарии

Ваша таблица сотрудников будет содержать основную информацию о сотруднике.

планировщик таблица будет содержать данные scheludeа также флаг для day_off (установите 1, если это выходной день) и поле комментария для любого типа комментария.

Если для day_off установлено значение 1, в поле будет указано описание day_off. timeOff таблица.
timeOff таблица, которую вы можете создать любым способом.Вам подадут дату, чтобы вы знали, какой сегодня день.У вас может быть поле причины, где 1 - день отпуска, 2 - больничный, 3 - личный день, 4 - переключение с другим сотрудником и так далее.Здесь вы можете указать поле для комментария, а также employee_id лица, для которого было изменено расписание, с

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...