Проектирование базы данных "Больница"
Министерство образования и науки Республики Казахстан
Карагандинский Государственный Технический Университет
Кафедра САПР
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к курсовой работе
По дисциплине:
"Проектирование баз данных"
Тема:
"Проектирование базы данных "Больница"
2009
Содержание
Введение
1. Постановка задачи
2. Обоснование выбора СУБД и программного обеспечения
3. Структура базы данных
3.1 Концептуальная модель данных
3.2 Логическая модель данных
4. Нормализация отношений
5. SQL – запросы
6. Интерфейс системы для работы с базой данных
6.1 Главное окно программы
6.2 Разработка меню
7. Отчеты
Заключение
Список использованной литературы
Введение
Любая организация нуждается в своевременном доступе к информации. Ценность информации в современном мире очень высока. Роль распорядителей информации в современном мире чаще всего выполняют базы данных. Базы данных обеспечивают надежное хранение информации, структурированном виде и своевременный доступ к ней. Практически любая современная организация нуждается в базе данных, удовлетворяющей те или иные потребности по хранению, управлению и администрированию данных.
Целью выполнения курсового проекта является приобретение студентами практических навыков проектирования баз данных и разработки программного обеспечения по управлению базами данных с использованием СУБД. В ходе выполнения данного курсового проекта необходимо разработать информационную базу данных для больницы, которая поможет любому пользователю легко найти нужную информацию о любом сотруднике или пациенте.
Больница – это такая организация, которая работает с очень большим объемом информации, как о сотрудниках, так и о пациентах. Врачам всегда следить за данными о своих пациентах, о курсе лечения больных. А руководству и бухгалтерии необходимо быть в курсе событий о своих сотрудниках. Для этого нужна общая база данных, включающая всю необходимую информацию. Программа является очень актуальной на сегодняшний день, она автоматизирует работу с базой данных и предоставляет пользователю (оператору) понятный и дружественный интерфейс.
Мощность базы данных обусловлена возможностью ее постоянного пополнения новыми данными, причем в неограниченном количестве информации. Это является очень удобным для пользователя. Таким образом, создание базы данных, обладающей такими свойствами, задача достаточно актуальная и полезная.
В задачи курсового проекта входят:
1. Разработка структуры баз данных.
2. Работа с несколькими таблицами и установление взаимосвязей между таблицами.
3. Разработка системы меню.
4. Разработка и формирование отчетов.
5. Использование расширенных средств СУБД ввода и вывода данных.
6. Организация справочной системы.
1. Постановка задачи
Необходимо спроектировать базу данных для больницы, в которой должны быть учтены все требования заказчика.
Требования были следующими:
База данных должна отражать всю информацию о больнице, в частности о сотрудниках и о пациентах;
В базе данных должна быть справочная информация для врачей о диагнозах и способах их лечения; о процедурах, которые имеются в больнице и их оплате; о лекарствах, имеющих место в медицине.
Должна быть возможность вносить изменения в данные и пополнения новыми данными.
В программе должна присутствовать функции поиска, выполнения определенных запросов, печати отчетов.
Программа должна иметь справочное руководство по использованию базы данных.
2. Обоснование выбора СУБД и программного обеспечения
В качестве средства проектирования базы данных, была выбрана СУБД MS SQL Server 2000.
В отличие от всех остальных наиболее известных СУБД, MS SQL Server имеет ряд преимуществ. Главным из них является то, что он обеспечивает создание информационных систем с архитектурой "клиент-сервер", в которой он играет роль сервера баз данных. Одним из важных свойств Microsoft SQL Server является возможность управления целостностью данных.
Также можно сказать, что он удовлетворяет требованиям, предъявляемым к системам распределенной обработки информации. Эта СУБД поддерживает: тиражирование данных, параллельную обработку, создание и обработку больших баз данных на недорогих аппаратных платформах, отличается простотой управления и использования.
Средством, связывающим клиента с сервером, является язык SQL (Structured Query Language) – язык структурированных запросов. В данном курсовом проекте были использованы основные операторы этого языка, в частности для создания запросов. Этот язык является очень распространенным на данный момент и имеет ряд особенностей.
Он позволяет:
• создавать базы данных и таблицы с полным описанием их структуры;
• выполнять основные операции манипулирования данными, такие как
вставка, модификация и удаление данных из таблиц;
• выполнять простые и сложные запросы.
Этот язык был выбран, так как он доступен для изучения, синтаксис команд понятен и прост.
В качестве среды разработки самой программы для работы с базой данных была выбрана среда программирования Borland Delphi 7, использующая язык программирования Object Pasсal.
Основные причины выбора языка Object Pascal:
– Главной из причин является возможность работы с базами данными;
– Легкость в организации доступа к базе данных;
– Возможность редактирования таблиц, вставки и удаления записей;
– Возможность создания достаточно понятного и дружественного интерфейса для пользователя.
– Простота языка позволяет быстро его освоить и создавать сложные программы;
Также, на выбор Object Pascal в качестве базового программного обеспечения, повлияли такие обстоятельства как, достаточное количество необходимой литературы по программированию в этой среде, распространенность этой среды и имеющийся достаточный опыт работы в ней.
3. Структура базы данных
3.1 Концептуальная модель
Основным объектом в рассматриваемой модели является больница. У больницы есть свои характеристики: заведующий больницей, адрес, название. Она представлена в виде составляющих ее отделений, которые тоже имеют ряд характеристик: заведующий отделением, название отделение, старшая медсестра.
В каждом отделении имеются сотрудники и пациенты, которые имеют свои личные данные.
Концептуальная модель базы данных представлена на рисунке 3.1.
Рисунок 3.1 – Концептуальная модель базы данных
3.2 Логическая модель базы данных
Логическая модель представлена на рисунке 3.2.
Рисунок 3.2 – Логическая модель базы данных
В базе данных имеется 9 таблиц. Первая самая главная таблица "Отделения", которая является главной для таблиц "Персонал", "Пациенты" и "Диагнозы", с которыми она связана по полю "Код отделения" и имеет место связь "1-ко многим". В свою очередь таблица "Персонал" является главной для таблицы "Процедуры", которая связана по полю "Код медсестры", связь также "1-ко многим".
Две таблицы "Диагноз-Лекарства" и "Диагноз-Процедуры" имеют составные ключи и связаны с двумя таблицами, по коду диагноза с таблицей "Диагнозы" и по коду лекарства и процедуры с таблицами "Лекарства" и "Процедуры" соответственно. Получилась связь "многие – ко многим". Такая связь нужна, для того чтобы можно было для одного диагноза выбрать много процедур и лекарств. Соответственно, для процедур и лекарств могут соответствовать много диагнозов.
4. Нормализация отношений
Нормализация – это процесс проектирования базы данных с целью исключения аномалий модификаций, избыточности данных и приведения отношений к нормальным формам.
Аномалии модификации – последствия, которые могут возникнуть вследствие изменения отношения (таблицы).
Аномалии устраняются путем разбиения отношения на 2 и более новых отношений. Аномалии делятся на 2 основных вида: аномалия удаления, аномалия вставки.
Можно сказать, что в данном курсовом проекте все таблицы находятся в 1НФ, так как все они удовлетворяют требованиям, необходимым для того, чтобы таблица считалась отношением. Главным образом, это требование атомарности.
Отношение находится во 2НФ, если оно находится в 1НФ и все неключевые атрибуты в отношении зависят только от всего ключа в целом.
Принадлежность к 2НФ всех таблиц, кроме двух таблиц ("Диагноз-Процедуры", "Диагноз-Лекарства"), можно определить по наличию 1 первичного простого ключа, состоящего из одного атрибута. А эти две таблицы состоят только из двух ключевых атрибутов, т.е. первичный ключ является составным. Таким образом, в этих таблицах нет неключевых атрибутов, независящих от всего ключа в целом.
Отношение находится в 3НФ, если отношение находится во 2НФ и не имеет транзитивных зависимостей.
В данном курсовом проекте все таблицы находятся в 3НФ. Хотя в начале курсового проекта предполагалось, что таблица "Персонал" будет включать в себя атрибуты "Должность" и "Оклад", что говорило бы о наличие транзитивной зависимости. В результате нормализации таблица "Персонал" была разбита на два отношения "Персонал" и "Должности", которые теперь находятся в 3НФ.
Отношение находится в НФБК, если оно находится в 3НФ и каждый детерминант является ключом-кандидатом.
Можно сказать, что во всех таблицах данной базы данных, кроме первичных ключей ключей-кандидатов не наблюдается, поэтому нельзя сказать, что они находятся в НФБК.
В 4НФ таблицы не могут находиться, так как они не находятся в НФБК.
Таким образом, все отношения находятся в 3НФ.
5. SQL–запросы
В данном курсовом проекте были выполнены следующие запросы:
По сотрудникам:
1. Вывести список сотрудников по определенной должности.
SELECT Personal. Fio as 'ФИО', Otdeleniya. Nazvanie_otdel as 'Название отделения'
FROM Otdeleniya INNER JOIN Personal ON Otdeleniya. Kod_otdel = Personal.kod_otdel
WHERE Personal. Doljnost like "Должность"
order by Otdeleniya. Nazvanie_otdel
2. Вывести список сотрудников по должности, учитывая отделение.
SELECT Personal. Fio as 'ФИО', Otdeleniya. Nazvanie_otdel as 'Название отделения'
FROM Otdeleniya INNER JOIN Personal ON Otdeleniya. Kod_otdel = Personal.kod_otdel
WHERE Otdeleniya. Nazvanie_otdel = "Отделение’ AND Personal. Doljnost like ‘Должность’
3. Вывести список сотрудников, оклад которых превышает n-й суммы
SELECT Personal. Fio as 'ФИО', Personal. Doljnost as 'Должность', Personal. Oklad as 'Оклад'
FROM Personal
where Personal. Oklad> (Сумма)
4. Вывести общий список сотрудников.
SELECT Personal. Fio as 'ФИО', Personal.doljnost as 'Должность', otdeleniya.nazvanie_otdel as 'Название отделения'
FROM Otdeleniya INNER JOIN Personal ON Otdeleniya. Kod_otdel = Personal. Kod_otdel
group by otdeleniya.nazvanie_otdel, Personal. Fio, Personal.doljnost
order by Personal. Fio
По пациентам:
1. Вывести список пациентов по определенному диагнозу.
SELECT Pacienty. Fio as "Ф.И.О.", Otdeleniya. Nazvanie_otdel as "Название отделения", Diagnozy. Nazvanie_diagnoza as "Название диагноза"
FROM Otdeleniya INNER JOIN (Diagnozy INNER JOIN Pacienty ON Diagnozy.kod_diagnoza = Pacienty. Kod_diagnoza) ON Otdeleniya. Kod_otdel = Pacienty.kod_otdel
WHERE Diagnozy. Nazvanie_diagnoza like ‘%Диагноз % '
order by Pacienty. Fio
2. Вывести список пациентов по определенной дате поступления.
SELECT Pacienty. Fio as "Ф.И.О.", Pacienty. Data_postup as "Дата поступления", Otdeleniya. Nazvanie_otdel as "Название отделения", Diagnozy. Nazvanie_diagnoza as "Название диагноза"
FROM Otdeleniya INNER JOIN (Diagnozy INNER JOIN Pacienty ON Diagnozy.kod_diagnoza = Pacienty. Kod_diagnoza) ON Otdeleniya. Kod_otdel = Pacienty.kod_otdel WHERE Pacienty. Data_postup= ‘Дата поступления’ and Diagnozy. Nazvanie_diagnoza like ' % Диагноз % '
order by Pacienty. Fio
3. Вывести список пациентов по дате выписки.
SELECT Pacienty. Fio as "Ф.И.О.", Otdeleniya. Nazvanie_otdel as "Название отделения", Diagnozy. Nazvanie_diagnoza as "Название диагноза"
FROM Otdeleniya INNER JOIN (Diagnozy INNER JOIN Pacienty ON Diagnozy.kod_diagnoza = Pacienty. Kod_diagnoza) ON Otdeleniya. Kod_otdel = Pacienty.kod_otdel WHERE Pacienty. Data_vypiski='Дата выписки'
order by Pacienty. Fio
4. Вывести список пациентов, поступавших за определенный период.
SELECT Pacienty. Fio as "Ф.И.О.", Pacienty. Data_postup "Дата пост-я", Otdeleniya. Nazvanie_otdel as "Отделение", Diagnozy. Nazvanie_diagnoza as "Диагноз"
FROM Otdeleniya INNER JOIN (Diagnozy INNER JOIN Pacienty ON Diagnozy.kod_diagnoza = Pacienty. Kod_diagnoza) ON Otdeleniya. Kod_otdel = Pacienty.kod_otdel
WHERE ((Pacienty. Data_postup='Дата поступления1') or (Pacienty. Data_postup>'Дата поступления1')) and
((Pacienty. Data_postup<' Дата поступления2') or
(Pacienty. Data_postup=' Дата поступления2'))
order by Pacienty.data_postup'
5. Вывести общий список пациентов.
SELECT Pacienty. Fio as "Ф.И.О.", Pacienty.data_postup as "Дата поступления", Diagnozy. Nazvanie_diagnoza as "Диагноз",
Otdeleniya. Nazvanie_otdel as "Отделение"
FROM Otdeleniya INNER JOIN (Diagnozy INNER JOIN Pacienty ON Diagnozy.kod_diagnoza = Pacienty. Kod_diagnoza) ON Otdeleniya. Kod_otdel = Pacienty.kod_otdel
Group by Otdeleniya. Nazvanie_otdel, Pacienty. Fio, Pacienty.data_postup, Diagnozy. Nazvanie_diagnoza
По лекарствам:
Вывести список диагнозов по определенному лекарству.
SELECT Diagnozy. Nazvanie_diagnoza as "Диагноз"
FROM Lekarstva INNER JOIN (Diagnozy INNER JOIN diagnoz_lekar ON Diagnozy. Kod_diagnoza=diagnoz_lekar.kod_diag) ON
Lekarstva. Kod_lekarstva=diagnoz_lekar.kod_lek
WHERE Lekarstva. Naim_lekarstva='Лекарство’
6. Интерфейс системы для работы с базой данных
6.1 Главное окно программы
Работа начинается с главного окна программы (рисунок 6.1), где приведены все таблицы в данной базе данных. Это является наиболее удобным, так как предполагается, что данные будут постоянно пополняться.
Рисунок 6.1 – Главное окно программы
Рабочая область состоит из трех вкладок: "Отделения", "Диагнозы", "Информация". На рисунке 6.1 можно увидеть вкладку "Отделения". Здесь содержится информация по отделениям, в частности данные о сотрудниках и пациентах (таблицы расположены в нижней части формы). Таблицы можно редактировать, добавлять новых сотрудников и пациентов, вносить какие-то свои изменения. Таблицу "Отделения" редактировать нельзя, так как количество отделений в больнице постоянное и не меняется.
Следующая вкладка "Диагнозы" приведена на рисунке 6.2.
Рисунок 6.2 – Вкладка "Диагнозы"
Здесь приведена информация непосредственно для врачей, т.е. какие процедуры и лекарства использовать для определенного диагноза. В свою очередь, врач также может дополнить таблицу новыми данными. Он может добавить новый диагноз, процедуры и лекарства, которые применяются для его лечения. Также есть возможность редактирования уже имеющихся данных.
Следующая вкладка "Информация", изображенная на рисунке 6.3, необходима как справочник. Здесь приведена информация о всех процедурах, имеющихся в больнице, а также о лекарствах (их названия и рецепт). Здесь также можно вносить свои изменения, и дополнять таблицу новыми данными.
Рисунок 6.3 – Вкладка "Информация"
6.2 Разработка меню
Меню проекта располагается в верхней строке экрана. Своим присутствием оно создает значительные удобства пользователям для работы с базой данных.
В меню программы имеются вкладки: "Поиск", "Запросы", "Отчеты", "Справка".
Во вкладке меню "Поиск" находятся команды: "Сотрудника", "Пациента" (Рисунок 6.4).
Рисунок 6.4 – Вкладка меню "Поиск"
При выборе вкладки "Сотрудника" открывается окно поиска, представленное на рисунке 6.5, где можно ввести фамилию нужного сотрудника.
Рисунок 6.5 – Окно поиска
При нажатии кнопки "Найти!" выводится либо уведомление о неудачном результате поиска, если такого сотрудника нет, либо окно результатов поиска, представленное на рисунке 6.6. При этом выводятся все сотрудники с такой фамилией. Аналогично делается поиск пациента, только при этом выбирается вкладка "Пациента".
Рисунок 6.6 – Окно результатов поиска
Следующая вкладка главного меню "Запросы", представленная на рисунке 6.7, содержит ряд команд по различным запросам.
Рисунок 6.7 – Вкладка главного меню "Запросы"
Выбрав команду "Списки по сотрудникам", появятся подкоманды: "По должности" и "По окладу".
Выбрав подкоманду "По должности" появляется окно запроса, представленное на рисунке 6.8, где можно выбрать критерии данного запроса. Соответственно, просто по должности, по отделению, общий список или же по должности и по отделению.
Рисунок 6.8 – Окно запроса "Сотрудники по должности"
При нажатии кнопки "Выполнить запрос!" появляется окно результатов запроса, изображенное на рисунке 6.9. Здесь также можно сразу сделать отчет по данному запросу, если эти данные необходимо вывести на печать.
Рисунок 6.9 – Окно результатов запроса
Также в пункте меню запросов по сотрудникам есть команда "По окладу", выбрав которую появляется окно данного запроса, представленное на рисунке 6.10
Рисунок 6.10 – Окно запроса "Сотрудники по окладу"
Следующей командой во вкладке "Запросы" является "Список пациентов", у которой есть подкоманды: "По диагнозу", "По дате поступления", "По дате выписки", "Поступавших за период…", "Общий список".
Выбрав запрос по диагнозу, появляется окно запроса, представленное на рисунке 6.11, где можно выбрать какой именно диагноз вас интересует.
Рисунок 6.11 – Окно запроса по диагнозу пациента
Выбрав запрос по дате поступления, появляется окно запроса, представленное на рисунке 6.12, где можно ввести ту дату поступления, относительно которой формируется список пациентов. Аналогично выполняется запрос по дате выписки.
Рисунок 6.12 – Окно запроса по дате поступления
Выбрав запрос "Поступавших за период", появляется окно запроса, представленное на рисунке 6.13, где можно ввести период, в пределах которого вам нужен список больных.
Рисунок 6.13 – Окно запроса по дате поступления
Также в меню имеется вкладка "Отчеты", выбрав которую можно сделать отчет по полному списку сотрудников и пациентов; отчет по перечню всех процедур, а также всех диагнозов по процедурам; отчет по лекарствам и по списку диагнозов по лекарствам.
Последняя вкладка главного меню "Справка" содержит всю необходимую справочную информацию для использования данной программы. Окно справки представлено на рисунке 6.14.
Рисунок 6.14 – Окно справки
7. Отчеты
В данном курсовом проекте были выполнены следующие виды отчетов:
1. Отчет "Список сотрудников по должности", выполненный по запросу. Вид отчета представлен на рисунке 7.1.
Рисунок 7.1 – Отчет "Список сотрудников по должности"
2. Отчет "Список сотрудников по отделению", выполненный по запросу. Вид отчета представлен на рисунке 7.2.
Рисунок 7.2 – Отчет "Список сотрудников по отделению"
3. Отчет "Общий список сотрудников". Вид отчета представлен на рисунке 7.3.
Рисунок 7.3 – Отчет "Общий список сотрудников"
4. Отчет "Список сотрудников по окладу". Вид отчета представлен на рисунке 7.4.
Рисунок 7.4 – Отчет "Список сотрудников по окладу"
5. Отчет "Список пациентов по диагнозу". Вид отчета представлен на рисунке 7.5.
Рисунок 7.5 – Отчет "Список пациентов по диагнозу"
6. Отчет "Список пациентов по дате поступления". Вид отчета представлен на рисунке 7.6.
Рисунок 7.6 – Отчет "Список пациентов по дате поступления"
7. Отчет "Список пациентов по дате выписки". Вид отчета представлен на рисунке 7.7.
Рисунок 7.7 – Отчет "Список пациентов по дате выписки"
8. Отчет "Список пациентов, поступавших за период". Вид отчета представлен на рисунке 7.8.
Рисунок 7.8 – Отчет "Список пациентов, поступавших за период"
9. Отчет "Общий список пациентов". Вид отчета представлен на рисунке 7.9.
Рисунок 7.9 – Отчет "Общий список пациентов"
10. Отчет "Список всех процедур". Вид отчета представлен на рисунке 7.10.
Рисунок 7.10 – Отчет "Список всех процедур"
10. Отчет "Список всех процедур". Вид отчета представлен на рисунке 7.10.
Рисунок 7.10 – Отчет "Список всех процедур"
11. Отчет "Список процедур по диагнозам". Вид отчета представлен на рисунке 7.11.
Рисунок 7.11 – Отчет "Список процедур по диагнозам"
12. Отчет "Список всех лекарств". Вид отчета представлен на рисунке 7.12.
Рисунок 7.12 – Отчет "Список всех лекарств"
13. Отчет "Список лекарств по диагнозам". Вид отчета представлен на рисунке 7.13.
Рисунок 7.13 – Отчет "Список лекарств по диагнозам"
Заключение
Разработанная в ходе выполнения курсового проекта база данных "Больница", а также программа для работы с базой данных является актуальной на сегодняшний день и имеет большую практическую значимость. Она помогает в работе сотрудников больницы по сбору данных, необходимых при лечении, а также по сбору данных о самих сотрудниках.
В результате выполнения данного курсового проекта были решены задачи, поставленные в начале работы. Была разработана структура базы данных; разработан интерфейс программы; в программу были включены функции поиска, выполнения различных запросов и отчетов; была организована справочная система. При этом были учтены все требования, выдвинутые в начале выполнения данного проекта.
Разработанная программа устойчиво выполняет все свои функции, но теперь стоит задача сделать ее более совершенной и более расширенной.
Список используемой литературы
Сорокин А.В. Delphi. Разработка баз данных. – СПб.: Питер, 2005. – 477 с.
Коннолли, Томас, Бегг, Каролин. Базы данных. Проектирование, реализация и сопровождение. Теория и практика. 3-е издание.: Пер. с англ. – М.: Издательский дом "Вильяме", 2003. – 1440 с.
Т. Карпова – Базы данных: модели, разработка, реализация. Уч. пособие – СПб: Питер, 2001.