Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
smetanin_db_coursework.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
338.14 Кб
Скачать

Заключение

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

Приложение 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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]