Проектирование базы данных ортопедического отделения больницы

 















КУРСОВАЯ РАБОТА

по дисциплине: «Базы данных»

на тему: «Проектирование базы данных ортопедического отделения больницы»


Оглавление


ВВЕДЕНИЕ

1 НОРМАЛИЗАЦИЯ БД

2 ПРАКТИЧЕСКАЯ ЧАСТЬ

.1Структура системы, перечень подсистем

.2Создание таблиц

.3Триггер

.4Процедура

ЗАКЛЮЧЕНИЕ

СПИСОК ЛИТЕРАТУРЫ


ВВЕДЕНИЕ


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


1 НОРМАЛИЗАЦИЯ БД


НФ (Первая нормальная форма)

Первая нормальная форма (1НФ) - это обычное отношение. Согласно нашему определению отношений, любое отношение автоматически уже находится в 1НФ. Напомним кратко свойства отношений (это и будут свойства 1НФ):

  1. В отношении нет одинаковых кортежей.
  2. Кортежи не упорядочены.
  3. Атрибуты не упорядочены и различаются по наименованию.
  4. Все значения атрибутов атомарны.

В ходе логического моделирования на первом шаге предложено хранить данные в одном отношении, имеющем следующие атрибуты:


ОРТОПЕДИЧЕСКОЕ ОТДЕЛЕНИЕ (ID_Pacienta, Diagnoz, Fio, №palati FIO rodstv, DATA operacii, ID_rabotnika, №brigadi , Doljnost rabotnika, FIO rabotnika, Naznachenie


где

ID_Pacienta - идентификационный номер пациента

Fio - фамилия, имя, отчество пациента

Diagnoz - диагноз пациента

№palati - номер палаты

FIO rodstv - номер ФИО ближайшего родственника пациента

DATA operacii - дата операции

ID_rabotnika - номер идентификационный номер работника отделения

№brigadi - номер бригады, в которой работает сотрудник

Doljnost rabotnika - должность работника

FIO rabotnika - ФИО работника отделения

Naznachenie - назначенные пациенту лекарства

Таблица 1 - Ортопедическое отделение (1НФ)

ID_PacientaFioDiagnoz№palatiFIO rodstvDATA operaciiID_rabotnika№brigadiFIO rabotnikaDoljnost rabotnikaNaznachenie1Иванов И.И.Миниск1Иванов И.И.10.10.1011Мазур В.В.хирургаспирин2Петров П.П.Миниск1Петров П.П12.10.1021Мазур В.В.хирургАспирин3Сидоров В.ВМиниск2Сидоров В.В.14.10.10.32Сахренко И.И.хирургАспирин4Савинов М.Г.Миниск3Савинова Г.В.14.10.1043Демин М.В.Хирург-ортопедАспирин5Петрова С.С.Миниск3Петрова С.С.15.10.1053Демин М.В.Хирург-ортопедАспирин

НФ (Вторая Нормальная Форма)

Отношение находится во второй нормальной форме (2НФ) тогда и только тогда, когда отношение находится в 1НФ и нет неключевых атрибутов, зависящих от части сложного ключа. (Неключевой атрибут - это атрибут, не входящий в состав никакого потенциального ключа).

Замечание. Если потенциальный ключ отношения является простым, то отношение автоматически находится в 2НФ.

В выше представленной таблице были добавлены второстепенные ключи(foreign key), а так же созданы соответствующие дополнительные таблицы, перечисляющие относящиеся к нужным полям данные:


Таблица 2 - Ортопедическое отделение (2НФ)

ID_PacientaFioDiagnoz№palatiFIO rodstv1Иванов И.И.Миниск1Иванов2Петров П.П.Миниск1Петров3Сидоров В.ВРазрыв АКС2Сидоров4Савинов М.Г.Разрыв АКС3Савинова5Петрова С.С.Разрыв АКС3Петрова

Таблица 3 - Ортопедическое отделения(2)

ID_Operacii(PK)ID_PacientaID_brigadiVid operaciiData operacii111Удаление жидкости10.10.12221Удаление жидкости11.10.12332Удаление пластины11.10.12443Удаление пластины12.10.12552Синтез пластины15.10.12

Таблица 4 - Отношение «диагнозы»

IDДиагноз1Разрыв связки2Вывих3Остеомиелит4Артрогрипоз5Миниск6Анкилоз7Перелом8Повреждение АКС9Анкилоз10Бурсит

3НФ (Третья Нормальная Форма)

Атрибуты называются взаимно независимыми, если ни один из них не является функционально зависимым от другого.

Отношение находится в третьей нормальной форме (3НФ) тогда и только тогда, когда отношение находится в 2НФ и все не ключевые атрибуты взаимно независимы.

Для достижения 3НФ необходимо избавиться от полей, не имеющих второстепенную связь. Следовательно, необходимо создать дополнительные таблицы, отображающие список с нужной информацией


Таблица 5 - Отношение «Бригады»

ID_brigadi№brigadi112233

Таблица 6 - Отношение «Вид операции»

IDVid operacii1Чистка2Синтез/удаление3ФиксированиеТаблица 7 - «Медперсонал»

ID_rabotnikaDoljnostFIO1ХирургМазур В.В2ХирургСахренко И.И.3Хирург-ортопедДемин М.В.4КардиологПетренко З.К.5МедсестраЗуратова М.М.6МедсестраЕвгеньева С.В.7МедсестраШевченко С.С.8СанитарИванченко К.С.9СанитарКоробова Е.Е.10АнестезиологДеулина А.А.

Таблица 8 - Отношение «Должность»

IDDoljnost1Хирург2Хирург-ортопед3Медсестра4Санитар5Кардиолог6Анестезиолог

В итоге все обнаруженные аномалии устранены. Реляционная модель, состоящая из 5 отношений, находящихся в 3 нормальной форме, является адекватной описанной модели предметной области.


2 ПРАКТИЧЕСКАЯ ЧАСТЬ


2.1 Структура системы, перечень подсистем


Для данной работы выделим 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- Поля и типы

ТаблицаПолеТипConstraintSpisok_operacionnihID_pacientaNumberPrimary keyFIOVarchar2-№ palatiNumber-adressVarchar2-DiagnozVarchar2Foreign KeyFIO rodstvennikaVarchar2-Data rojdeniaDate-Operacionii SpisokID_OperaciiNumberPrimary keyID_pacientaNumberForeign KeyID_BrigadiNumberForeign KeyVid OperaciiVarchar2-DateDate-NaznachenieID_PacientaNumberForeign key Id_rabotnikaNumberForeign key ID_lekarstvaNumberForeign key PrimechanieVarchar2-DiagnozIDNumberPrimary keyDiagnozVarchar2-DoljnostIDNumberPrimary keyDoljnostVarchar2-LekarstvaID_lekarstvaNumberPrimary keyNaimenovanieVarchar2-GrafikIDNumberPrimary key№ brigadiNumberForeign KeyDataData-BrigadaID_brigadiNumberPrimary key№ brigadiNumber- Brigadi_ rabotnikovID_brigadiNumberForeign KeyID_rabotnikaNumberForeign KeyMedpersonalID_rabotnikaNumber-DoljnostVarchar2Foreign KeyFIOVarchar2-OtpuskDate-

2.2 Создание таблиц


Далее с помощью языка 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,-, Стаканова Елена Алексеевна , Май );


2.3 Триггер

база данные о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;.


2.4 Процедура


Ниже описано создание процедуры, которая проверяет и заносит в переменную количество операций, запланированных на сегодняшний день (дата сегодняшнего дня берется из 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» [<http://www.firststeps.ru/sql/oracle/>]

2.«Oracle Application Express»[ <http://apex.oracle.com/i/index.html>]

3.«Форум программистов» [<http://www.sql.ru>]

.Санжей Мишра «Секреты Oracle SQL». Издательство «Символ-плюс» 2010г.

.Коннор МакДональд «Oracle PL/SQL». Издательство «ДиаСофтЮП» 2009г.

.Скотт Урман «Программирование на языке PL/SQL. Руководство для программистов». Издательство «Лори» 2009г.


КУРСОВАЯ РАБОТА по дисциплине: «Базы данных» на тему: «Проектирование базы данных о

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ