- •Содержание
- •Техническое задание
- •Анализ предметной области
- •1.2 Постановка задачи
- •2. Технический проект информационной системы
- •2.1 Функциональная модель
- •2.1.1 Контекстная диаграмма и диаграммы детализации процессов
- •2.1.2 Диаграмма дерева узлов
- •2.2 Информационная модель
- •2.2.1 Идентификация сущностей и связей. Er-диаграмма логического уровня.
- •2.2.2 Er-диаграмма физического уровня. Ограничения доменов. Ограничения ссылочной целостности. Переопределение триггеров. Индексирование отношений.
- •2.2.3 Определение представлений, хранимых процедур серверной компоненты. Er-диаграмма в режиме отображения представлений
- •2.3 Верификация спроектированной логической модели.
- •3. Реализация системы
- •3.1. T-sql-определения регламентированных запросов
- •3.2 T-sql-определения триггеров
- •3.3 T-sql-определения хранимых процедур
- •3.4 T-sql-определения курсоров
- •3.5 Распределение прав доступа пользователей
- •Заключение
- •Список использованных литературных источников
3.2 T-sql-определения триггеров
1. proverka _date - Триггер, который будет запрещать добавления записи в таблицу «Договор», если дата начала договора старше текущей даты.
CREATE TRIGGER [dbo].[proverka_date] /*Обьявляем имя триггера*/
ON [dbo].[Договор] /*Указываем имя таблицы, с которой будет связан триггер*/
FOR INSERT /*Указываем операцию, на кот. будет срабатывать триггер (здесь вставку)*/
AS
IF NOT EXISTS(SELECT * FROM [dbo].[Договор], inserted
WHERE inserted.Начало < GETDATE())/*Если Начало меньше сегодняшней даты, то такой договор не существует*/
BEGIN
RAISERROR ('Введена некорректная дата начала', 11, 1);
ROLLBACK TRANSACTION /*откат (отмена) транзакции*/
END
/*inserted – временная таблица, куда заносятся добавляемые данные*/
2. Delete_doljnik – Триггер, который будет разрешать удаление данных из таблицы «Должники» при наличии прав администратора.
CREATE TRIGGER [dbo].[delete_doljnik] /*Обьявляем имя триггера*/
ON [dbo].[Должники] /*Указываем имя таблицы, с которой будет связан триггер*/
FOR DELETE/*Указываем операцию, на кот. будет срабатывать триггер (здесь удаление)*/
AS
IF EXISTS( SELECT * FROM dbo.Должники
WHERE (CURRENT_USER <> 'dbo')) /*Если текущий пользователь не владелец базы*/
BEGIN
PRINT 'У вас нету прав для удаления записи'
ROLLBACK TRANSACTION/*откат (отмена) транзакции*/
END
3. Delete_zarplata - Триггер, который будет запрещать удаление записей в таблице «Зарплата», если дата выдачи меньше трех месяцев.
CREATE TRIGGER [dbo].[delet_zarpl]
ON [dbo].[Зарплата]
FOR DELETE /*Указываем операцию, на кот. будет срабатывать триггер (здесь удаление)*/ AS IF EXISTS (SELECT * FROM deleted
WHERE deleted.[Дата выдачи]>(SELECT DATEADD([DAY], -90, GETDATE()))))) /*Если введененная дата больше разницы текущей даты и текущей даты -90 дней*/
BEGIN PRINT 'Не возможно удалить запись о зарплате менее 3х месяцев'
ROLLBACk TRANSACTION /*откат (отмена) транзакции*/
END
4. Proverka_date_zarplata - Триггер, который будет срабатывать при изменении данных таблицы «Зарплата» и проверять дату выдачи зарплаты.
CREATE TRIGGER [dbo].[proverka_date_zarplata]
ON [dbo].[Зарплата]
FOR UPDATE /*Указываем операцию, на кот. будет срабатывать триггер (здесь обновление)*/
AS IF UPDATE([Дата выдачи])
AND datename(dw,GETDATE()) in ('Пятница') )) /*Если текущий день недели «Пятница»*/
BEGIN PRINT 'Вы же сегодня не работаете!'
ROLLBACK TRANSACTION /*откат (отмена) транзакции*/
END
5. Insert_zayavka - Триггер, который будет проверять дату подачи заявки при добавлении записей в таблицу «Заявки».
CREATE TRIGGER [dbo].[insert_zayavka]
ON [dbo].[Заявки]
FOR INSERT /*Указываем операцию, на кот. будет срабатывать триггер (здесь вставка)*/AS
BEGIN IF EXISTS (SELECT * FROM [dbo].[Заявки], [inserted]
WHERE [inserted].[Дата подачи заявки]>GETDATE()) /*Если Дата подачи заявки больше текущей даты*/
BEGIN PRINT ('Неверно введена дата подачи заявки')
ROLLBACK TRANSACTION /*откат (отмена) транзакции*/
END
6. Update_zayavki - Триггер, который будет записывать информацию о заявках в талицу Updated_zzayavki при обновлении записей в таблице «Заявки».
СREATE TRIGGER [dbo].[update_zayavki]
ON [dbo].[Заявки] FOR UPDATE /*Указываем операцию, на кот. будет срабатывать триггер (здесь обновление)*/
AS INSERT INTO UpdatedZayavk ([Код заявки],[Номер квартиросъемщика], Описание, [Дата изменения], Статус) /*Добавляем измененную запись в таблицу UpdatedZayavk */
SELECT [Код заявки],[Номер квартиросъемщика],
Описание, datename(month, month(getdate())), Результат FROM inserted
BEGIN PRINT ('Запись об изменениях занесена в таблицу')
END
7. Zayavki_del - Триггер, который будет запрещать удаление записей из таблицы «Заявки», при наличии статуса «В процессе».
CREATE TRIGGER [dbo].[zayavki_del] ON [dbo].[Заявки] FOR DELETE /*Указываем операцию, на кот. будет срабатывать триггер (здесь удаление)*/
AS IF EXISTS (SELECT count(*) from dbo.Заявки)
IF EXISTS(SELECT * FROM dbo.Заявки, deleted WHERE deleted.Результат='В процессе') /*Если удаляемая заявка имеет Результат=”В процессе”*/
BEGIN PRINT ('Вы не можете удалить запись со статусом "В процессе"')
ROLLBACK TRANSACTION/*откат (отмена) транзакции*/ END
8. Zapret_deleted_otdel - Триггер, который будет запрещать удаление записи из таблицы «Отделы» при наличии в удаляемом отделе сотрудников.
CREATE TRIGGER [dbo].[zapret_delet_otdel] /*Обьявляем имя триггера*/
ON [dbo].[Отделы] /*Указываем имя таблицы, с которой будет связан триггер*/
AFTER DELETE /*Указываем операцию, на кот. будет срабатывать триггер (здесь удаление)*/
AS
IF EXISTS(SELECT * FROM deleted, dbo.Отделы, dbo.Сотрудники
WHERE deleted.[Номер отдела] IN (SELECT dbo.Сотрудники.[Номер отдела] /*Если удаляемый отдел содержит записи в таблице сотрудники с номером удаляемого отдела */
FROM dbo.Сотрудники)) /*Если в таблице Сотрудники есть записи с Номером отдела*/
BEGIN PRINT('В отделе находятся сотрудники!')
ROLLBACK TRANSACTION /*откат (отмена) транзакции*/ END
9. Deleted_sotrdnik - Триггер, который будет записывать информацию о удаляемых записях в таблице «Сотрудники».
CREATE TRIGGER [dbo].[deleted_sotrudnik]
ON [dbo].[Сотрудники] FOR DELETE /*Указываем операцию, на кот. будет срабатывать триггер (здесь удаление)*/
AS INSERT INTO dbo.DELETED_SOTRUNDNIKI
([Табельный номер], [Номер отдела], Фамилия, Имя, [Дата удаления])
SELECT deleted.[Табельный номер], deleted.[Номер отдела],
deleted.Фамилия, deleted.Имя, (CAST(YEAR(getdate()) AS varchar(50))+'.'+ CAST(MONTH(getdate()) AS varchar(50))+'.'+CAST(DAY(getdate()) AS varchar(50))) FROM deleted /*вставляем удаляемую запись в таблицу Deleted_sotrudniki*/ BEGIN
RAISERROR ('Выполнено успешно', 11, 1); END
10. Proverka_otdela - Триггер, который будет проврять существование отдела упри добавлении записи в таблицу «Сотруники».
CREATE TRIGGER [dbo].[proverka_otdela]
ON [dbo].[Сотрудники] FOR INSERT /*Указываем операцию, на кот. будет срабатывать триггер (здесь вставка)*/ AS
IF NOT EXISTS (SELECT * FROM dbo.Сотрудники, inserted
WHERE inserted.[Номер отдела] IN (SELECT dbo.Отделы.[Номер отдела] FROM dbo.Отделы)) /*Если в таблице отделы не существует отдела с номером отдела вставляемой записи */
BEGIN RAISERROR ('Отдела не существует', 11, 1);
ROLLBACK TRANSACTION /*откат (отмена) транзакции*/
END
11. Proverka_sovershennolet - Триггер, который будет проверять возраст нового сотрудника.
CREATE TRIGGER [dbo].[proverka_socershennoletie]
ON [dbo].[Сотрудники] FOR INSERT /*Указываем операцию, на кот. будет срабатывать триггер (здесь вставка)*/AS
IF EXISTS(SELECT * FROM dbo.Сотрудники, inserted
WHERE YEAR(inserted.[Дата рождения])>(YEAR(GETDATE())-18)) /*если Дата рождения вставляемой записи сотрудника меньше 18 лет */
BEGIN RAISERROR ('Сотруднику нету 18 лет!!!', 11, 1);
ROLLBACK TRANSACTION /*откат (отмена) транзакции*/
END