Курсовая работа: Разработка физической модели базы данных Учёт затрат на медицинские услуги
GROUP BY D.IDTalon)<>1)
BEGIN
RAISERROR('Нельзя иметь больше одного основного диагноза в талоне!',16,1)
ROLLBACK TRAN
END
Теперь мы при добавлении или редактировании отношения DiagnTalon (Диагноз в талоне) SQL Server будет следить за тем, чтобы основной диагноз для определённого талона был только один. Точно так же реализовано правило, согласно которому в карте выбывшего больного должен быть только один основной диагноз.
При создании базы данных мы столкнулись также со следующей проблемой. Отношение Talon (Статистический талон) имеет атрибуты IDLPU, IDVrach, IDPacient, IDType, которые представляют собой внешние ключи на отношения LPU, Vrach, Type. Мы можем внести в базу данных информацию, согласно которой, например, врач А лечил в ЛПУ B в качестве специалиста C, но при этом врач А может не быть врачом ЛПУ B, и не быть обладать специальностью C. Чтобы исправить данный недостаток, были написаны соответствующие триггеры, приведём пример одного из них.
ALTER TRIGGER TalonVrachLPU
ON Talon
FOR INSERT, UPDATE
AS
IF (EXISTS(SELECT 'true' FROM INSERTED
WHERE INSERTED.IDVrach NOT IN (SELECT IDVrach FROM
Vrach
WHERE IDLPU=INSERTED.IDLPU)
))
BEGIN
RAISERROR('Такого врача нет в выбранном ЛПУ!',16,1)
ROLLBACK TRAN
END
Аналогичным образом написаны триггеры, запрещающие добавление или редактирование отношений Talon и Karta таким образом, чтобы информация в базе данных стала противоречивой (врач не принадлежащий данному ЛПУ или не обладающий данной специальностью).
В ходе анализа предметной области выяснилось, что нельзя вводить документацию по пациенту, который уже умер. Ведь умершие не могут посещать врачей или лежать в больнице. Для предотвращения ввода такой информации был написан триггер, запрещающий ввод данных по умершему пациенту в отношение Talon (Статистический талон), его сценарий приведён ниже:
CREATE TRIGGER StopSmert
ON Talon
FOR INSERT
AS
IF (EXISTS(SELECT 'true' FROM INSERTED
WHERE INSERTED.IDPacient IN (SELECT DISTINCT IDPacient FROM
Talon T