- •База данных системы управления проектами
- •1. Постановка задачи
- •2. Описание бд
- •2.1 Таблицы
- •2.2 Функции
- •2.3 Хранимые процедуры
- •2.4 Триггеры
- •2.6 Действия по расписанию
- •2.7 Пользователи и роли
- •Заключение
- •Приложение 1 диаграмма базы данных
- •Приложение 2 файл Functions.Sql
- •Приложение 3 файл Tables.Sql
- •Приложение 4 файл Triggers.Sql
- •Приложение 5 файл Procedures.Sql
- •Приложение 6 файл Reports.Sql
- •Приложение 7 файл Jobs.Sql
- •Приложение 8 файл Permissions.Sql
- •Приложение 9 файл FillData.Sql
- •Приложение 10 файл TestData.Sql
- •Приложение 11 файл Drop.Sql
2.2 Функции
Реализованные функции используются главным образом как вспомогательные, при построении запросов для рассчитываемых значений, а также в качестве ограничений для проверки и сохранения ссылочной и логической целостности базы данных.
FormatUserName – функция составляет полное имя пользователя вида «Имя Отчество Фамилия» из трех отдельных кусков. Параметры: @FirstName NVARCHAR(256), @MiddleName NVARCHAR(256), @LastName NVARCHAR(256).
GetProjectManager – вычисляет нового менеджера проекта при его отсутствии или замене предыдущего. Ищет вверх по иерархии проектов подходящего менеджера и возвращает его Id. Параметры: @ProjectId INT, @ExceptId INT.
GetTaskPerformer – вычисляет нового исполнителя задачи при его отсутствии или замене предыдущего. Ищет вверх по иерархии задач подходящего исполнителя, если такого нет – выбирает менеджера проекта с помощью GetProjectManager, и возвращает его Id. Параметры: @TaskId INT, @ExceptId INT.
GetProjectEndDate – вычисляет дату окончания проекта. Если она не задана у проекта, ищет вверх по иерархии проектов и возвращает первую непустую. Параметры: @ProjectId INT.
GetTaskEndDate – вычисляет дату окончания задачи. Если она не задана у задачи, пытается использовать дату у вехи. Если вехи нет, то идет вверх по иерархии задач, а затем по иерархии проектов с помощью GetProjectEndDate. Параметры: @TaskId INT.
IsValue – действует аналогично ISNULL, но при этом есть возможность реагировать не только на NULL, но и на переданное в качестве параметра @Except значение.
CheckTask – проверяет корректность объекта задачи (Task) – т.е. задача привязана к тому же проекту, что и её родительская задача, а также её компонент и веха. А также что состояние принадлежит заданной категории задачи.
GetCurrentUserId – Получает UserId по текущему пользователю MS SQL. Если такого нет, то возвращает NULL.
2.3 Хранимые процедуры
В базе данных создан ряд хранимых процедур, реализующих функции бизнес-логики. Процедуры используются как для получения информации о задачах и проектах, так и для упрощенного создания и управления объектами предметной области.
GetProject – процедура, выводящая полную информацию о проекте с учетом всех данных его подпроектов и связанных записей. Входные параметры: @ProjectId INT. Вывод – [Project], [Parent project], [Creator], [Manager], [Start date], [End date], [Modify date], [Managers], [Users].
GetTask – процедура, выводящая полную информацию о задаче с учетом всех данных её подзадач и связанных записей. Входные параметры: @TaskId INT. Вывод - [Task], [Parent task], [Project], [Component], [Milestone], [Category], [State], [Creator], [Performer], [Estimated hours], [Spent hours], [Progress], [Start date], [End date], [Modify date], [Performers], [Comments], [Files].
GetCategoryTransitions – процедура, выводящая жизненные циклы категорий задач в удобном виде. Входные параметры: @CategoryId INT. Вывод – [Category], [Initial state], [Final state].
GetProjectUsers – процедура, выводящая списки участников проекта в удобном виде. Входные параметры: @ProjectId INT. Вывод – [Project], [User]
GetTaskAuditors – процедура, выводящая списки аудиторов задачи в удобном виде. Входные параметры: @TaskId INT. Вывод – [Task], [Auditor]
CreateProject – процедура для создания нового проекта. Доступна при наличии роли Manager. Поле CreatorId у созданного проекта устанавливается в соотвествии с текущим пользователем. Входные параметры: @Title NVARCHAR(256), @ParentId INT, @Content NVARCHAR(MAX), @StartDate DATE, @EndDate DATE, @ManageId INT.
UpdateProject – процедура для изменения существующего проекта. Доступна при наличии роли Manage и только если её создатель (CreatorId) – текущей пользователь. Входные параметры: @ProjectId INT, @Content NVARCHAR(MAX), @StartDate DATE, @EndDate DATE, @ManageId INT.
DeleteProject - процедура для удаления существующего проекта. Доступна при наличии роли Manage и только если её создатель (CreatorId) – текущей пользователь. Входные параметры: @ProjectId INT.
CreateComponent – процедура для создания компонента. Доступна при наличии роли Manage и только если создатель проекта Project (CreatorId) – текущей пользователь. Параметры: @ProjectId INT, @ParentId INT, @Title NVARCHAR(256).
DeleteComponent – процедура для удаления компонента. Доступна при наличии роли Manage и только если создатель проекта Project (CreatorId) – текущей пользователь. Параметры: @ComponentId INT.
CreateMilestone – процедура для создания вехи. Доступна при наличии роли Manage и только если создатель проекта Project (CreatorId) – текущей пользователь. Параметры: @ProjectId INT, @Title NVARCHAR(256), @Due DATE.
DeleteMilestone – процедура для удаления вехи. Доступна при наличии роли Manage и только если создатель проекта Project (CreatorId) – текущей пользователь. Параметры: @MilestoneId INT.
CreateTask – процедура для создания новой задачи. Доступна только при наличии роли Contributor и присутствии текущего пользователя в списках участников проекта. Параметры: @Title NVARCHAR(256), @ParentId INT, @ProjectId INT, @CategoryId INT, @Content NVARCHAR(MAX), @ComponentId INT, @StartDate DATE, @EndDate DATE, @PerformerId INT, @MilestoneId INT, @EstimatedTime DECIMAL(6, 1).
UpdateTask – процедура изменения задачи. Доступна только при наличии роли Contributor и если создатель задачи – текущий пользователь. Параметры: @TaskId INT, @StateId INT, @StartDate DATE, @EndDate DATE, @PerformerId INT, @MilestoneId INT, @EstimatedTime DECIMAL(6, 1), @SpentTime DECIMAL(6, 1), @Progress TINYINT, @Content NVARCHAR(MAX).
DeleteTask – процедура удаления задачи. Доступна только при наличии роли Contributor и если создатель задачи – текущий пользователь. Параметры: @TaskId INT.
CreateTaskCheckItem - процедура создания пункта задачи. Доступна только при наличии роли Contributor и если создатель задачи Task – текущий пользователь. Параметры: @TaskId INT, @Title NVARCHAR(256).
DeleteTaskCheckItem - процедура удаления пункта задачи. Доступна только при наличии роли Contributor и если создатель задачи Task – текущий пользователь. Параметры: @TaskCheckItemId INT.
CreateComment - процедура создания комментария. Доступна только при наличии роли Contributor и если создатель задачи Task – текущий пользователь. Параметры: @TaskId INT, @Content NVARCHAR(MAX).
DeleteComment - процедура удаления комментария. Доступна только при наличии роли Contributor и если создатель задачи Task – текущий пользователь. Параметры: @CommentId INT.
CheckUser – служебная процедура, проверящая текущего пользователя на соответствие заданному, и вызывающая ошибку в случае несоответствия. Входные данные - @UserId INT.
GetProjectInfo – служебная процедура, используется в GetProject для рекурсивного сбора данных о проекте и подпроектах. Параметры: @ProjectId INT. Выходные: @StartDate DATE, @EndDate DATE, @ModifyDate DATE, @Managers NVARCHAR(MAX), @Users NVARCHAR(MAX)
GetTaskInfo – служебная процедура, используется в GetTask для рекурсивного сбора данных о задаче и подзадачах. Параметры: @TaskId INT. Выходные: @Estimated INT, @Spent INT, @Progress INT, @StartDate DATE, @EndDate DATE, @ModifyDate DATE, @Performers NVARCHAR(MAX), @Comments INT, @Files INT.
