Как расширить схему базы данных для новых требований обязательного и необязательного участия - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть приложение для управления событиями в нашем учреждении. Недавно была запущена новая программа для персонала, и меня попросили обработать ее в том же приложении. Эта новая программа для персонала имеет два направления: группа 01 предназначена для недавно принятых на работу людей, а группа 02 - для опытных людей.

Итак, на каждый год будет около 12-15 мероприятий. например,

EV-001 - Skill 01 --- Mandatory
EV-002 - Skill 02 --- Mandatory
...
EV-013 - Skill 13 --- Optional
EV-014 - Skill 14 --- Optional

Программа для вновь нанятых сотрудников потребует от них участия в 5 конкретных c мероприятиях в год, позвольте назвать обязательные мероприятия. Эти события могут меняться с годами. Что на следующий год они могут включать в себя 5 разных мероприятий.

Программа для опытных сотрудников потребует от них участия в ЛЮБЫХ 5 мероприятиях в год (с 1 по 14).

У меня уже есть следующие таблицы

  1. Таблица сотрудников
  2. Таблица событий (таблица событий имеет поле «тег события», которое я изначально планировал использовать)
  3. Таблица участия (для ведения учета участия в любом мероприятии)

Итак, первая проблема заключается в том, как расширить мою базу данных, чтобы я мог соответствовать новым требованиям. Как я уже говорил, я планировал использовать поле «Метка события» в моей таблице событий, чтобы объявить два типа событий: обязательные и необязательные. и для группы 01 я проверяю, участвовали ли они в 5 обязательных типах событий, а для группы 02 я проверяю, участвовали ли они в 5 событиях из обязательного + необязательного. Таким образом, проблема в том, что если участник участвует в «EV-002 - Skill 02» дважды, то его участие должно учитываться только один раз, а не дважды.

В конце мне нужно показать, сколько человек участвовало в этой программе и сколько закончило ее из каждой группы и каждой партии.

Так есть ли какое-нибудь гибкое и простое решение этой проблемы?

Я использую MS SQL с ASP .NET / C#

1 Ответ

0 голосов
/ 17 февраля 2020

После попытки и обсуждения этого с некоторыми коллегами я принял решение, которое могло бы быть полезным для других.

Я создал 5 новых таблиц. Первый -

<b>Program Event Table</b> 
(Columns)
 - Event  ID 
 - Event Name
 - Description 
 - More Fields

Второй -

<b>Program Participants Group Table</b> 
(Columns)
 - Group ID 
 - Group Name
 - Description 
 - Mandatory Events Required
 - Optional Events Required
 - More Fields

Третий -

<b>Program Events Group Table</b> 
(Columns)
 - Event ID (FK)
 - Group ID (FK)
 - Mandatory (bit field) 
 - Optional (bit field)
 - More items if required

Четвертый стол -

<b>Program Participants Table (listing the registered participants)</b> 
(Columns)
 - Participant ID 
 - Employee ID (FK)
 - Group ID  (FK)
 - Batch ID  (FK)
 - More items if required

, а последний таблица

<b>Program Batch Table (For distinguishing between different batches)</b> 
(Columns)
 - Batch ID 
 - Batch Start Date
 - Batch End Date
 - More items if required

Я заполнил таблицу Группы программных событий списком событий, связанных с программой, и критериями их требований для каждой группы. Таким образом, если событие 01 - навык 01 требуется для группы 01 и является необязательным для группы 02, то в таблице групп программных событий будет 2 записи.

Event 01, Group 01, 1, 0, ...
Event 01, Group 02, 0, 1, ...

Но если Событие 08 - Навык 08 является опцией для Группы 02, но не требуется Группой 01, тогда в таблице будет только 1 запись.

Event 08, Group 02, 0, 1, ...

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

...