− При удалении информации в таблице «Нормативные_документы_отделов» (или в таблице «Нормативные_документы») в таблице «Отделы» ничего не происходит, вставка и обновление возможно в том случае, если в таблице «Отделы» существует кортеж с соответственным первичным ключом. При удалении информации из таблицы «Отделы» в таблице «Нормативные_документы_отделов» (или «Нормативные_документы») удаляется соответствующий кортеж. При вставке кортежа в таблицу «Отделы», в таблице «Нормативные_документы_отделов» («Нормативные_документы») ничего не происходит.
Для приложения были разработаны следующие триггеры:срабатывает при удалении нормативного документа из таблицы. Все удаленные строки заносятся в таблицу «DeletedItem», а также имя пользователя, удалившего строку, и дату;срабатывает при добавлении в базу данных нового отдела и проверяет, чтобы номер штатного расписания нового отдела был в пределах 1000<номер_штатного_расписания<2000. Если номер не соответствует условию, появляется сообщение с предупреждением;_komandirovka проверяет, чтобы при вводе данных в таблицу «Командировки» год даты командировки «Дата_с» не был больше текущего года (например, 2015 год);_Tarif срабатывает при обновлении тарифной ставки в таблице «Отделы» и выдает изменённую среднюю тарифную ставку по отделам;_Otpusk проверяет, чтобы в таблицу «Табель_отпусков» не вносились увольнения, т.к. для этого существует отдельная таблица;_Otdel проверяет, чтобы при добавлении нового отдела в таблицу «Отделы» в поле «Количество_штатных_единиц» не было нуля. В противном случае появляется сообщение с предупреждением;записывает в отдельную таблицу «DeletedWorker» информацию о записях, удаленных из таблицы «Сотрудники», а также имя пользователя, который удалил записи, и дату удаления;_Komandirovka проверяет, чтобы при добавлении записи в таблицу «Командировки» было указано место командировки;_speczvania проверяет, чтобы при добавлении записи втаблицу «Спецзвания» было заполнено поле «Служба_в_ВС»;запрещает добавление новой записи в таблицу «Сотрудники», если не заполнено хотя бы одно из полей.
ER-диаграмма физического уровня приведена в графическом материале «ER-диаграмма физического уровня» (рисунок 14).
Рисунок 14 - ER-диаграмма физического уровня
Для приложения были разработаны следующие представления:
Dolznost предоставляет информацию обо всех начальниках РОВД (из таблицы «Сотрудники»);
BD предоставляет информацию о сотрудниках, у кого будет День рождения в следующем месяце (из таблиц «День_рождения» и «Сотрудники»);
Dismiss предоставляет информацию об уволенных сотрудниках (из таблицы «Увольнения»);
Raspisanie предоставляет информацию о штатном расписании (из таблицы «Отделы»);
Prikaz предоставляет информацию о приказах и ответственных за их выполнение (из таблицы «Приказы»);
Otpusk предоставляет информацию обо всех отпусках (из таблиц «Табель_отпусков» и «Сотрудники»);
Ukaz предоставляет информацию о нормативных документах типа «Закон РБ» (из таблицы «Нормативные_документы»);
Trip предоставляет информацию о всех командировках, которая также включает в себя личный номер сотрудника, его ФИО, отдел, должность (из таблиц «Командировки» и «Сотрудники»);
Sluzba_v_VS предоставляет информацию о сотрудниках, которые служили в ВС (из таблиц «Сотрудники» и «Спецзвания»);
Otdel предоставляет информацию обо всех сотрудниках, которые работают в отделе ООПиП (из таблицы «Сотрудники);
Obrazovanie предоставляет информацию о сотрудниках с высшим образованием (из таблицы «Сотрудники»);
Komandirovki предоставляет информацию обо всех командировках прошлого года, также информацию о командированном сотруднике: ФИО, должность, отдел (из таблиц «Командировки» и «Сотрудники»);
Experience предоставляет информацию о трудовых стажах всех сотрудников (из таблиц «Трудовой_стаж» и «Сотрудники»);
Docs предоставляет информацию о нормативных документах (из таблицы «Нормативные_документы»);
Basic Wage предоставляет информацию об отделах, где тарифная ставка выше 220000 (из таблицы «Отделы»).
Для приложения были разработаны следующие хранимые процедуры:
− NewDepartment для вставки новых данных в таблицу «Отделы», NewWorker − в таблицу «Сотрудники»;
− DeleteWorker для удаления данных из таблицы «Сотрудники»;
− UpdateWorker для обновления записей в таблице «Сотрудники», BasicWageRateUp - в таблице «Отделы»;
− Search (по возрасту) для поиска записей в таблице «Сотрудники» и «День_рождения», SearchWorker (на фамилии или началу фамилии) Search (по возрасту) в таблице«Сотрудники»;
− BDay для предоставления информации о дне рождении по личному номеру сотрудника;
− BusinessTrip для просмотра командировок определенного сотрудника (по личному номеру);
− City для поиска всех командировок в определенном городе (город передается через параметр);
− Dismissal для просмотра уволенных сотрудников;
− Documents поиск всех нормативных документов отдела (название отдела передается через параметр);
− GetWorkerInfo для просмотра личного дела сотрудника по его личному номеру;
− Lists для просмотра штатной расстановки определенного отдела (название отдела передается через параметр);
− Orders поиск приказа по его номеру;
− Position для просмотра сотрудников, занимающих определенную должность (должность передается через параметр);
− Schedule для просмотра штатного расписания отдела по его номеру;
− SpecZvanie для просмотра сотрудников, которые служили в ВС;
− Vacation для просмотра отпусков определенного сотрудника (по личному номеру);
− WorkerExperience для подсчёта трудового стажа
определенного сотрудника (по личному номеру).
.3 Верификация спроектированной логической модели
После разработки информационной модели ее следует связать с функциональной моделью. Такая связь гарантирует завершенность анализа, гарантирует, что есть источники данных (сущности) для всех работ. Связывание моделей способствует согласованности, корректности и завершенности анализа. Стрелки в функциональной модели обозначают некоторую информацию, использующуюся в моделируемой системе. В информационной модели на логическом уровне информация изображается в виде сущностей. Сущности состоят из совокупностей экземпляров сущностей (кортежи отношений). К информационной модели предъявляется требование нормализации, что должно обеспечить компактность и непротиворечивость хранения данных. Информация, которая моделируется одной стрелкой в функциональной модели, может содержаться в нескольких сущностях и атрибутах информационной модели. На функциональной модели могут присутствовать различные стрелки, изображающие одни и те же данные. Информация о таких стрелках находится в одних и тех же сущностях. Следовательно, одной и той же стрелке в функциональной модели могут соответствовать несколько сущностей в информационной модели и, наоборот, одной сущности может соответствовать несколько стрелок.
Работы в функциональной модели могут создавать или изменять данные,
которые соответствуют входящим и выходящим стрелкам. Они могут воздействовать
как целиком на сущности (создавая и модифицируя экземпляры сущности), так и на
отдельные атрибуты сущности.
Таблица 1 - Отчет о верификации модели
|
Arrow Name |
Entity Name |
Attribute Name |
|
Данные о сотрудниках |
Адрес |
|
|
|
|
Город |
|
|
|
Дом |
|
|
|
Квартира |
|
|
|
Личный_номер |
|
|
|
Область |
|
|
|
Страна |
|
|
|
Улица |
|
|
День_рождения |
|
|
|
|
Дата_рождения |
|
|
|
Количество_полных_лет |
|
|
|
Личный_номер |
|
|
Сотрудники |
|
|
|
|
Должность |
|
|
|
Звание |
|
|
|
Имя |
|
|
|
Личный_номер |
|
|
|
Образование |
|
|
|
Отчество |
|
|
|
Фамилия |
|
Нормативные документы |
Нормативные_документы |
|
|
|
|
Дата_документа |
|
|
|
Номер_нормативного_документа |
|
|
|
Тип |
|
Приказы и отчёты |
Приказы |
|
|
|
|
Дата_приказа |
|
|
|
Номер_приказа |
|
|
|
Ответственный |
|
Штатное расписание |
Командировки |
|
|
|
|
Дата_с |
|
|
|
Личный_номер |
|
|
|
Место |
|
|
|
Номер_командировки |
|
|
|
Срок |
|
|
Отделы |
|
|
|
|
Имя_начальника |
|
|
|
Количество_штатных_единиц |
|
|
|
Личный_номер |
|
|
|
Название_отдела |
|
|
|
Номер_штатного_расписания |
|
|
|
Отчество_начальника |
|
|
|
Примечание |
|
|
|
Тарифная ставка |
|
|
|
Телефон |
|
|
|
Факс |
|
|
|
Фамилия_начальника |
|
|
Спецзвания |
|
|
|
|
Выслуга |
|
|
|
Личный_номер |
|
|
|
Служба_в_ВС |
|
|
Табель_отпусков |
|
|
|
|
Дата_с |
|
|
|
Количество_дней |
|
|
|
Личный_номер |
|
|
|
Номер_табеля |
|
|
|
Тип_отпуска |
|
|
Трудовой_стаж |
|
|
|
|
Дата_приёма_на_работу |
|
|
|
Личный_номер |
|
|
|
Стаж |
|
|
Увольнения |
|
|
|
|
Дата_документа |
|
|
|
Личный_номер |
|
|
|
Номер_документа |
|
|
|
Причина |
3 Реализация системы
1. Вывод информации об отделах, где тарифная ставка выше 220000
CREATE VIEW Basic Wage
ASНазвание_отдела, Номер_штатного_расписания, Тарифная_ставкаdbo.Отделы(Тарифная_ставка > 220000) // Выборка строк таблицы, где значения в колонке «Тарифная_ставка» больше 220000
. Предоставление информации о сотрудниках, у кого будет День рождения в следующем месяце
CREATE VIEW BD
AS
SELECT dbo.Сотрудники.Фамилия, dbo.Сотрудники.Имя, dbo.Сотрудники.Отчество, dbo.День_рождения.Дата_рождения
FROM dbo.Сотрудники INNER JOIN dbo.День_рождения ON dbo.Сотрудники.Личный_номер = dbo.День_рождения.Личный_номер
WHERE (MONTH(dbo.День_рождения.Дата_рождения) = MONTH(DATEADD(MONTH, 1, GETDATE()))) // Выборка строк таблицы, где месяц, указанный в колонке «Дата_рождения», совпадает со следующим месяцем, в соответствии с текущей датой, установленной на данном сервере
. Предоставление информации об уволенных сотрудниках
CREATE VIEW Dismiss
AS
SELECT dbo.Сотрудники.Личный_номер, LOWER(dbo.Сотрудники.Название_отдела) AS [Название отдела],
// LOWER - функция преобразования текста в нижний регистр
dbo.Сотрудники.Фамилия, dbo.Сотрудники.Имя, dbo.Сотрудники.Отчество, dbo.Сотрудники.Должность, dbo.Сотрудники.Звание, dbo.Увольнения.Номер_документа, dbo.Увольнения.Дата_документа, dbo.Увольнения.Причина, GETDATE() //GETDATE - функция, которая возвращает текущую системную отметку времени базы данных в виде значения datetime
AS Сегодня
FROM dbo.Увольнения INNER JOIN dbo.Сотрудники ON dbo.Увольнения.Личный_номер = dbo.Сотрудники.Личный_номер
. Предоставление информации о нормативных документах
CREATE VIEW Docs
AS
SELECT dbo.Нормативные_документы.Номер_нормативного_документа, dbo.Нормативные_документы.Тип, DATEPART(YEAR, dbo.Нормативные_документы.Дата_документа) AS [Год принятия]
// DATEPART - функция, которая возвращает целое число, представляющее указанный компонент YEAR указанной даты «Дата_документа»
FROM dbo.Нормативные_документы INNER JOIN dbo.Нормативные_документы_отделов ON dbo.Нормативные_документы.Номер_нормативного_документа = dbo.Нормативные_документы_отделов.Номер_нормативного_документа
. Предоставление информации обо всех начальниках РОВД
CREATE VIEW Dolznost
ASНазвание_отдела, Личный_номер, Фамилия, Имя, Отчество, Должность, Званиеdbo.Сотрудники(Должность LIKE 'начальник') // Выборка строк таблицы, где значение колонки «Должность» совпадает с указанным значением «начальник»
. Предоставление информации о трудовых стажах сотрудников
CREATE VIEW Expierence
ASdbo.Сотрудники.Личный_номер, dbo.Сотрудники.Фамилия, dbo.Сотрудники.Имя, dbo.Сотрудники.Должность, dbo.Сотрудники.Название_отдела, CAST(dbo.Трудовой_стаж.Стаж AS varchar(50)) AS Стаж // CAST - функция преобразования типа данных в varchar(50) значений колонки «Трудовой_стаж»
FROM dbo.Сотрудники INNER JOIN dbo.Трудовой_стаж ON dbo.Сотрудники.Личный_номер = dbo.Трудовой_стаж.Личный_номер
. Предоставление информации обо всех командировках в прошлом году