
- •База данных системы управления проектами
- •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
Заключение
В ходе данной курсовой работы была разработана база данных системы управления проектами. Были изучены и применены такие объекты баз данных, как таблицы, индексы, ограничения, хранимые процедуры, функции, триггеры, планируемые задания и роли. База данных имеет множество ограничений, гарантирующих логическую целостность данных, процедуры получения, управления данными, средства создания отчетов, включающих статистическую информацию и детальное разграничение доступа пользователей к чтению и модификации данных.
Приложение 1 диаграмма базы данных
Приложение 2 файл Functions.Sql
USE db209
GO
CREATE FUNCTION [dbo].[GetCurrentUserId]()
RETURNS INT
AS
BEGIN
DECLARE @SysUserId INT
SELECT @SysUserId = DATABASE_PRINCIPAL_ID()
DECLARE @UserId INT = NULL
SELECT @UserId = Id FROM [dbo].[User] WHERE SysUserId = @SysUserId
RETURN @UserId
END
GO
CREATE FUNCTION [dbo].[CheckTask](@ProjectId INT, @ParentId INT, @ComponentId INT, @MilestoneId INT, @CategoryId INT, @StateId INT)
RETURNS INT
AS
BEGIN
DECLARE @CheckParent INT
DECLARE @CheckComponent INT
DECLARE @CheckMilestone INT
DECLARE @CheckState INT
SELECT @CheckParent = COUNT(*) FROM [dbo].[Task] WHERE Id = @ParentId AND ProjectId = @ProjectId
SELECT @CheckComponent = COUNT(*) FROM [dbo].[Component] WHERE Id = @ComponentId AND ProjectId = @ProjectId
SELECT @CheckMilestone = COUNT(*) FROM [dbo].[Milestone] WHERE Id = @MilestoneId AND ProjectId = @ProjectId
SELECT @CheckState = COUNT(*) FROM [dbo].[StateTransition] WHERE CategoryId = @CategoryId AND (InitialStateId = @StateId OR FinalStateId = @StateId)
IF (@CheckParent > 0 OR @ParentId IS NULL) AND
(@CheckComponent > 0 OR @ComponentId IS NULL) AND
(@CheckMilestone > 0 OR @MilestoneId IS NULL) AND
(@CheckState > 0)
RETURN 1
RETURN 0
END
GO
CREATE FUNCTION [dbo].[IsValue](@Value INT, @Replace INT, @Except INT = NULL)
RETURNS INT
AS
BEGIN
IF @Value IS NULL OR @Except IS NULL
RETURN ISNULL(@Value, @Replace)
IF @Value = @Except
RETURN @Replace
RETURN @Value
END
GO
CREATE FUNCTION [dbo].[GetProjectManager](@ProjectId INT, @ExceptId INT = NULL)
RETURNS INT
AS
BEGIN
DECLARE @ManagerId INT
SELECT @ManagerId = [dbo].[IsValue](ManagerId, [dbo].[GetProjectManager](ParentId, @ExceptId), @ExceptId)
FROM [dbo].[Project]
WHERE Id = @ProjectId
RETURN @ManagerId
END
GO
CREATE FUNCTION [dbo].[GetTaskPerformer](@TaskId INT, @ExceptId INT = NULL)
RETURNS INT
AS
BEGIN
DECLARE @PerformerId INT
SELECT @PerformerId = [dbo].[IsValue]([dbo].[IsValue](PerformerId, [dbo].[GetTaskPerformer](ParentId, @ExceptId), @ExceptId), [dbo].[GetProjectManager](ProjectId, @ExceptId), @ExceptId)
FROM [dbo].[Task]
WHERE Id = @TaskId
RETURN @PerformerId
END
GO
CREATE FUNCTION [dbo].[GetProjectEndDate](@ProjectId INT)
RETURNS DATE
AS
BEGIN
DECLARE @ProjectDate DATE
SELECT @ProjectDate = ISNULL(EndDate, [dbo].[GetProjectEndDate](ParentId)) FROM [dbo].[Project] WHERE Id = @ProjectId
RETURN @ProjectDate
END
GO
CREATE FUNCTION [dbo].[GetTaskEndDate](@TaskId INT)
RETURNS DATE
AS
BEGIN
DECLARE @TaskDate DATE
SELECT @TaskDate = ISNULL(ISNULL(ISNULL(t.EndDate, m.Due), [dbo].[GetTaskEndDate](t.ParentId)), [dbo].[GetProjectEndDate](t.ProjectId)) FROM [dbo].[Task] t LEFT OUTER JOIN [dbo].[Milestone] m ON t.MilestoneId = m.Id WHERE t.Id = @TaskId
RETURN @TaskDate
END
GO
CREATE FUNCTION [dbo].[FormatUserName](@FirstName NVARCHAR(256), @MiddleName NVARCHAR(256), @LastName NVARCHAR(256))
RETURNS NVARCHAR(256)
AS
BEGIN
IF @FirstName IS NULL OR @LastName IS NULL
RETURN NULL
IF @MiddleName IS NOT NULL AND @MiddleName <> ''
RETURN @FirstName + ' ' + @Middlename + ' ' + @LastName
RETURN @FirstName + ' ' + @LastName
END
GO