- •Курсовая работа по дисциплине «технологии баз данных» Тема: Проектирование и разработка базы данных для муниципальной больницы
- •Содержание
- •Введение
- •Основная часть
- •Описание объекта проектирования
- •Описание бизнес процессов
- •Описание пользователей базы данных
- •Описание цели и задач базы данных
- •Концептуальная модель
- •Реляционная модель
- •Структура таблиц
- •Объекты базы данных, решающие поставленные задачи:
- •Процедуры
- •Триггеры
- •Список литературы
Триггеры
1. Триггер CheckReceptionDateTime
В таблице dbo.Reception сопоставляется дата добавляемого приема и дата рождения указанного пациента. В случае, если дата приема меньше даты рождения пациента происходит откат.
Листинг программного кода:
create trigger CheckReceptionDateTime
on dbo.Reception
for insert
as
if (select i.TimeReception from inserted i) < (select p.DateBirth from Pacient p,inserted i where p.ID = i.PacientID)
begin
print 'Дата приема не может быть меньше даты рождения пациента'
rollback
end
go
Некорректная попытка добавления приема:
exec AddReception
@pacientID = 1,
@notice = 'значительное улучшение',
@diagnosisID = 1,
@medicineID = 1,
@timeReception = '1919-01-01',
@medProcedureID = 1
go
Результат срабатывания триггера:
2. Триггер DontUpdateGender
Данный триггер запрещает добавление и удаление строк в таблицу dbo.Gender, после того, как уже были введены 2 пола.
Листинг программного кода:
create trigger DontUpdateGender
on dbo.Gender
for update,insert,delete
as
if (select COUNT(*) from Gender) > 1
begin
print 'Запрещено добавление или удаление строк в таблице'
rollback
end
go
Пример кода для срабатывания триггера:
select * from Gender
insert into Gender(Name) values('M')
Результат срабатывания триггера:
3. Триггер IncorrectHospName
Проверяет корректность введеного названия больницы при изменении или добавлении строк (при условии что в таблице уже есть хотя бы 1 строка).
Листинг программного кода:
create trigger IncorrectHospName
on dbo.Hospital
for update, insert
as
if(select COUNT(*) from Hospital) > 0
begin
if ((select i.Name from inserted i) <> (select top 1 Name from dbo.Hospital))
begin
print 'Введеное имя больницы отличается от имеющегося. Изменение таблицы отменено'
rollback
end
end
go
Пример кода для срабатывания триггера:
select * from Hospital
update Hospital
set Name = 'Больница №3'
where ID = 1
4. Триггер, осуществляющий проверку уникальности номера амбулаторной карты пациента. В случае, если номер карты добавляемого/изменяемого пациента не уникален, то он изменяется на уникальный, полученный с помощью функции Rand().
Листинг программного кода:
create trigger CheckAbulanceNo
on dbo.Pacient
after update,insert
as
if (select count(*) from Pacient p,inserted i where p.AmbulanceNo = i.AmbulanceNo) > 1
begin
declare @num int = (select inserted.AmbulanceNo from inserted)
----
while (select COUNT(*) from Pacient where Pacient.AmbulanceNo = @num) > 0
set @num = Floor(RAND() * 100000)
----
update Pacient
set AmbulanceNo = @num
from inserted i
where Pacient.ID = i.ID
print 'Номер карты изменен на случайный'
end
go
Пример кода для срабатывания триггера:
update Pacient
set AmbulanceNo =
(select Pacient.AmbulanceNo from Pacient where Pacient.ID = 0)
where ID = 1
Результат срабатывания триггера:
Список литературы
Виейра Р. «Программирование баз данных Microsoft SQL Server 2005»