У меня есть база данных, в которую заносится информация о том, когда сотрудник посещал курс и когда он в следующий раз должен посетить этот курс (курсы обычно бывают ежегодными).
Например, следующий сотрудник прослушал курс «1» 1 января 2010 года и, поскольку курс является ежегодным, следующий должен пройти 1 января 2011 года. Как и сегодня, 20 мая 2010 года, статус курса читается как « Завершите », то есть они прошли курс и не должны делать это снова до следующего года:
EmployeeID CourseID AttendanceDate DueDate Status
123456 1 01/01/2010 01/01/2011 Complete
В терминах DueDate
я вычисляю это в SQL при обновлении записи сотрудника, например, DueDate = AttendanceDate + CourseFrequency (я определяю частоту курса из отдельной таблицы).
В моем веб-приложении (asp.net mvc) я извлекаю эти данные для всех сотрудников и отображаю их в виде таблицы, которую могут просматривать менеджеры по персоналу. Это позволяет HR определить, кому нужно идти на курсы.
У меня проблема в следующем.
Используя приведенный выше пример, предположим, что сегодня 2 января 2011 года. В этом случае сотрудник 123456 теперь запоздал для курса, и я хотел бы установить Status
в Неполный, чтобы менеджер по персоналу мог видеть, что ему нужно Действие это, т.е. получить работника на курс.
Я мог бы создать триггер в базе данных для запуска в одночасье, чтобы обновить поле Status
для всех сотрудников на основе текущей даты. Из того, что я прочитал, мне нужно будет использовать курсоры , чтобы циклически проходить по каждой строке, чтобы изменить статус, и это считается плохой практикой / неэффективным или, по крайней мере, чем-то, чего следует избегать, если вы можете ???
В качестве альтернативы, я мог бы вычислить Status
в своем коде C # после того, как я извлек данные из базы данных и перед тем, как отобразить их на экране. Проблема в том, что Status
в базе данных не обязательно будет соответствовать тому, что показано на экране, что мне кажется просто неправильным.
Есть ли у кого-нибудь какие-либо советы относительно наилучшего подхода к решению этой проблемы?
Помогает, если бы я использовал курсор, я сомневаюсь, что зациклился бы над более чем 1000 записями в любой момент времени. Может быть, это такой маленький объем, что использование курсоров нормально?