Для данной работы выделим 10 таблиц, которые будут содержать всю информацию. Свяжем таблицы друг с другом внешними ключами. Схема базы данных выполнена в программе Erwin и представлена на рисунке 1.
Рисунок 1 - Схема баз данных
1. Spisok_operacionnih - таблица, содержащая в себе информацию о пациентах, находящихся в отделении.
2. Operacionii_spisok - таблица, содержащаяв себе информацию об будущих операциях
3. Naznachenie - таблица, содержащая в себе информацию о назначениях различных лекарств пациентам
4. Lekarstva - список всех лекарств в отделении
5. Brigada - список с номерами бригад отделения
6. Brigadi rabotnikov - таблица, содержащая в себе информацию о том, к какой бригаде относится каждый сотрудник отделения
7. Medpersonal - таблица, содержащая в себе информацию о каждом сотруднике хирургического отделения
8. Grafik - таблица, содержащая в себе информацию о графике работы каждой бригады отделения
9. Doljnost - список всех должностей
10. Diagnoz - список диагнозов
Таблица 9- Поля и типы
Таблица | Поле | Тип | Constraint |
Spisok_operacionnih | ID_pacienta | Number | Primary key |
FIO | Varchar2 | - | |
№ palati | Number | - | |
adress | Varchar2 | - | |
Diagnoz | Varchar2 | Foreign Key | |
FIO rodstvennika | Varchar2 | - | |
Data rojdenia | Date | - | |
Operacionii Spisok | ID_Operacii | Number | Primary key |
ID_pacienta | Number | Foreign Key | |
ID_Brigadi | Number | Foreign Key | |
Vid Operacii | Varchar2 | - | |
Date | Date | - | |
Naznachenie | ID_Pacienta | Number | Foreign key |
Id_rabotnika | Number | Foreign key | |
ID_lekarstva | Number | Foreign key | |
Primechanie | Varchar2 | - | |
Diagnoz | ID | Number | Primary key |
Diagnoz | Varchar2 | - | |
Doljnost | ID | Number | Primary key |
Doljnost | Varchar2 | - | |
Lekarstva | ID_lekarstva | Number | Primary key |
Naimenovanie | Varchar2 | - | |
Grafik | ID | Number | Primary key |
№ brigadi | Number | Foreign Key | |
Data | Data | - | |
Brigada | ID_brigadi | Number | Primary key |
№ brigadi | Number | - | |
Brigadi_ rabotnikov | ID_brigadi | Number | Foreign Key |
ID_rabotnika | Number | Foreign Key | |
Medpersonal | ID_rabotnika | Number | - |
Doljnost | Varchar2 | Foreign Key | |
FIO | Varchar2 | - | |
Otpusk | Date | - |
Создание таблиц
Далее с помощью языка PL/SQL создадим и заполним таблицы.
Скрипты таблиц:table spisok_operacionnih
(ID_Pacienta Number Not Null Primary key,Varchar2(400),
№palati Number,Varchar2 (100),Varchar2(200),_rodstvennika Varchar2(400),_rojdenia Date),FK_SO Foreign Key (Diagnoz) references Diagnoz (Diagnoz);into spisok_operacionnih (ID_Pacienta, FIO, №palati, address, Diagnoz, FIO_rodstvennika, Data_rojdenia) VALUES (‘1’, ‘ Алексеев Алексей Алексеевич’, ‘1’, ‘ Алексено 3-1’, ‘-‘, ‘Алексеев Алексей Иванович’, ’10.10.69’);into spisok_operacionnih (ID_Pacienta, FIO, №palati, address, Diagnoz, FIO_rodstvennika, Data_rojdenia) VALUES (‘2’, ‘ Андреев Андрей Алексеевич’, ‘1’, ‘ Петровка 31-12’, ‘-‘, ‘Андреев Алексей Иванович’, ’15.09.77’);into spisok_operacionnih (ID_Pacienta, FIO, №palati, address, Diagnoz, FIO_rodstvennika, Data_rojdenia) VALUES (‘3’, ‘ Бондарев Виктор Сергеевич, ‘2’, ‘ Сталеваров 41-2, ‘-‘, ‘Бондарев Сергей Генадьевич’, ’02.01.59’);into spisok_operacionnih (ID_Pacienta, FIO, №palati, address, Diagnoz, FIO_rodstvennika, Data_rojdenia) VALUES (‘4’, ‘ Воложин Виктор Андреевич, ‘2’, ‘ Маркса 116-23, ‘-‘, ‘Воложина Тамара Сергеевна’, ’05.06.91’);into spisok_operacionnih (ID_Pacienta, FIO, №palati, address, Diagnoz, FIO_rodstvennika, Data_rojdenia) VALUES (‘5’, ‘ Вахитов Рустам Авраамович, ‘2’, ‘ Ворошилова 16-35, ‘-‘, ‘Вахитов Авраам Маратович ’, ’16.10.47’);into spisok_operacionnih (ID_Pacienta, FIO, №palati, address, Diagnoz, FIO_rodstvennika, Data_rojdenia) VALUES (‘6’, ‘Гайсин Марат Алексеевич, ‘3’, ‘ Ворошилова 88-15, ‘-‘, ‘Гайсина Светлана Евгеньевна ’, 19.12.85’);into spisok_operacionnih (ID_Pacienta, FIO, №palati, address, Diagnoz, FIO_rodstvennika, Data_rojdenia) VALUES (‘7’, ‘ Дубов Сергей Сергеевич, ‘4’, ‘ Вокзальная 112-31, ‘-‘, ‘Дубова Наталья Леонидовна ’, ’16.05.49’);into spisok_operacionnih (ID_Pacienta, FIO, №palati, address, Diagnoz, FIO_rodstvennika, Data_rojdenia) VALUES (‘8’, ‘ ДемьяновА Анна Ивановна, ‘5’, ‘ Завенягина 1-3, ‘-‘, ‘-‘, ’16.10.47’);into spisok_operacionnih (ID_Pacienta, FIO, №palati, address, Diagnoz, FIO_rodstvennika, Data_rojdenia) VALUES (‘9’, ‘ Давыдова Анна Сергеевна, ‘5’, ‘ Завенягина 12-32, ‘-‘, ‘-‘, ’17.01.57);into spisok_operacionnih (ID_Pacienta, FIO, №palati, address, Diagnoz, FIO_rodstvennika, Data_rojdenia) VALUES (‘10’, ‘ Петрова Наталья Ивановна, ‘5’, ‘ Мичурина 15-49, ‘-‘,‘-‘, ‘17.02.83’);table Operacionii_Spisok
(ID_Operacii Number Not Null Primary key,_Pacienta Number,_brigadi Number,_operacii Varchar2 (100),Varchar2(200));FK_OS Foreign Key (ID_Pacienta) references spisok_operacionnih (ID_Pacienta),FK_OS1 Foreign Key (ID_brigadi) references Brigada (ID_brigadi);table Naznachenie
(ID_Pacienta Number,_Rabotnika Number,_Lekarstva Number,Varchar2 (100),Date),FK_Nazn Foreign Key (ID_Pacienta) references spisok_operacionnih (ID_Pacienta),FK_Nazn1 Foreign Key (ID_rabotnika) references Medpersonal (ID_rabotnika),FK_Nazn2 Foreign Key (ID_Lekarstva) references Lekarstva (ID_Lekarstva);table Diagnoz
(ID Number Not Null Primary key,Varchar2(400));into Diagnoz (ID, Diagnoz) VALUES (’1’,’ Разрыв связки’);into Diagnoz (ID, Diagnoz) VALUES (’2’,’ Бурсит’);into Diagnoz (ID, Diagnoz) VALUES (’3’,’ Вывих’);into Diagnoz (ID, Diagnoz) VALUES (’4’,’ Остеомиелит’);into Diagnoz (ID, Diagnoz) VALUES (’5’,’ Артрогрипоз’);into Diagnoz (ID, Diagnoz) VALUES (’6’,’ Миниск’);into Diagnoz (ID, Diagnoz) VALUES (’7’,’ Анкилоз’);into Diagnoz (ID, Diagnoz) VALUES (’8’,’ Перелом’);into Diagnoz (ID, Diagnoz) VALUES (’9’,’ Повреждение АКС’);into Diagnoz (ID, Diagnoz) VALUES (’10’,’ Анкилоз’);table Doljnost
(ID Number Not Null Primary key,Varchar2(400));into Doljnost (ID, Doljnost) VALUES (’1’,’ Хирург’);into Doljnost (ID, Doljnost) VALUES (’2’,’ Санитар’);into Doljnost (ID, Doljnost) VALUES (’3’,’ Кардиолог’);into Doljnost (ID, Doljnost) VALUES (’4’,’ Анестезиолог’);into Doljnost (ID, Doljnost) VALUES (’5’,’ Медсестра’);into Doljnost (ID, Doljnost) VALUES (’6’,’ Главный хирург’);table Lekarstva
(ID_Lekarstva Number Not Null Primary key,Varchar2(400));into Lekarstva (ID_Lekarstva, Naimenovanie) VALUES (’1’,
’ Пеницилин’);into Lekarstva (ID_Lekarstva, Naimenovanie) VALUES (’2’,
’Абактал’);into Lekarstva (ID_Lekarstva, Naimenovanie) VALUES (’3’,
‘Метронидазол’);into Lekarstva (ID_Lekarstva, Naimenovanie) VALUES (’4’,
‘Дравмадол’);into Lekarstva (ID_Lekarstva, Naimenovanie) VALUES (’5’,
‘Найс’);into Lekarstva (ID_Lekarstva, Naimenovanie) VALUES (’6’,
‘Анальгин’);into Lekarstva (ID_Lekarstva, Naimenovanie) VALUES (’7’,
‘Парацетамол’);into Lekarstva (ID_Lekarstva, Naimenovanie) VALUES (’8’,
‘Цефазолин’);into Lekarstva (ID_Lekarstva, Naimenovanie) VALUES (’9’,
‘Цефтриаксон’);into Lekarstva (ID_Lekarstva, Naimenovanie) VALUES (’10’,
‘Аспирин’);table Grafik
(ID Number Not Null Primary key,
№brigadi Number,Date),FK_Graf Foreign Key (№brigadi) references Brigada (№brigadi);table Brigada
(ID_brigadi Number Not Null Primary key,
№brigadi Number);into Brigada (ID_brigadi, №brigadi) VALUES (’1’,
’1’);into Brigada (ID_brigadi, №brigadi) VALUES (’2’,
’2’);into Brigada (ID_brigadi, №brigadi) VALUES (’3’,
’3’);into Brigada (ID_brigadi, №brigadi) VALUES (’4’,
’4’);table Brigadi_rabotnikov
(ID_brigadi Number,_rabotnika Number),FK_Br Foreign Key (ID_brigadi) references Brigada (ID_brigadi),FK_Br2 Foreign Key (ID_rabotnika) references Medpersonal (ID_rabotnika);table Medpersonal
(ID_rabotnika Number Not Null Primary key,Varchar2(400),Varchar2(400),Date),FK_Med Foreign Key (Doljnost) references Doljnost (Doljnost);into Medpersonal (ID_rabotnika, Doljnost, FIO, Otpusk) VALUES (’1’,’-’, ’Иванов Иван Иванович’, ’Январь’);into Medpersonal (ID_rabotnika, Doljnost, FIO, Otpusk) VALUES (’2’,’-’, ‘Мазур Леонид Исаакович’, ‘Февраль’);into Medpersonal (ID_rabotnika, Doljnost, FIO, Otpusk) VALUES (’3’,’-’, ‘ Петров Петр Антонович ’, ‘Февраль’);into Medpersonal (ID_rabotnika, Doljnost, FIO, Otpusk) VALUES (’4’,’-’, ‘ Сергеева Анна Ивановна ’, ‘ Май ’);into Medpersonal (ID_rabotnika, Doljnost, FIO, Otpusk) VALUES (’5’,’-’, ‘ Шиванчук Евгения Васильевна ’, ‘ Март ’);into Medpersonal (ID_rabotnika, Doljnost, FIO, Otpusk) VALUES (’6’,’-’, ‘ Борисова Майя Петровна ’, ‘ Октябрь ’);into Medpersonal (ID_rabotnika, Doljnost, FIO, Otpusk) VALUES (’7’,’-’, ‘ Страховая Инна Матвеевна ’, ‘ Декабрь ’);into Medpersonal (ID_rabotnika, Doljnost, FIO, Otpusk) VALUES (’8’,’-’, ‘ Деулин Максим Алексеевич ’, ‘ Июнь ’);into Medpersonal (ID_rabotnika, Doljnost, FIO, Otpusk) VALUES (’9’,’-’, ‘ Иванова Марья Петровна ’, ‘ Август ’);into Medpersonal (ID_rabotnika, Doljnost, FIO, Otpusk) VALUES (’10’,’-’, ‘ Стаканова Елена Алексеевна ’, ‘ Май ’);
Триггер
база данные оracle
Ниже описано создание триггера, который выполняет определенную проверку: в один рабочий день может работать только одна бригада в ортопедическом отделении. График работы бригад находится в таблице «Grafik». Операции может проводить в конкретный день, только та бригада, которая работает по графику в этот день. Если в операционном списке записана дата операции и номер бригады, которая не работает в этот день, то «всплывает» ошибка.
Скрипт триггера:
Сreate or replace trigger "AVB_OPERATING_LIST_T1"or update or delete on "AVB_OPERATING_LIST"each rowTRIGGER AVBinsert on AVB_OPERATING_LISTNUMBER;NUMBER;NUMBER;NUMBER;MIN(id) into MIN from AVB_OPERATING_LIST;MAX(id) into MAX from AVB_OPERATING_LIST;count(*) into X from AVB_GRAFIK where AVB_OPERATING_LIST. DATE_OPERATING=AVB_GRAFIK.DATE and AVB_OPERATING_LIST.№BRIGADI=AVB_GRAFIK.№Brigadi and AVB_OPERATING_LIST.ID_OPERATING=i;i in MIN..MAX loop(X=0 then NULLX=1 then DELETE FROM AVB_OPERATING_LIST where AVB_OPERATING_LIST.id=i;if;if;loop;
COMMIT;.
Процедура
Ниже описано создание процедуры, которая проверяет и заносит в переменную количество операций, запланированных на сегодняшний день (дата сегодняшнего дня берется из SYSDATE(системного времени)).
Скрипт процедуры:PROCEDURE XXX(DATE_OPERATING date) asNUMBER;_dt DATE:=sysdate;_tx DATE;_tx:=TRUNC(v_dt,'dd/mm/yy');count(*) into X from AVB_OPERATING_LIST where AVB_OPERATING_LIST.DATE_OPERATING=v_tx;into AVB_vspomog(vspomog) values(X);
END;
Комментарий: при создании процедуры была использована вспомогательная таблица AVB_vspomog, которая не описана в системе и не отображена на рисунке 1.
Заключение
Благодаря изученному материалу была создана БД, которая имеет дополнительный триггер и процедуру для выполнения условия задачи. Был изучен программный продукт Oracle Application Express и был закреплен материал по изученному ранее языку MySql.
Список литературы
1. «Первые шаги - PL/SQL в Oracle» [<https://www.firststeps.ru/sql/oracle/>]
2. «Oracle Application Express»[ <https://apex.oracle.com/i/index.html>]
3. «Форум программистов» [<https://www.sql.ru>]
. Санжей Мишра «Секреты Oracle SQL». Издательство «Символ-плюс» 2010г.
. Коннор МакДональд «Oracle PL/SQL». Издательство «ДиаСофтЮП» 2009г.
. Скотт Урман «Программирование на языке PL/SQL. Руководство для программистов». Издательство «Лори» 2009г.