Проектирование и разработка базы данных для муниципальной больницы

Описание объекта проектирования, бизнес-процессов, пользователей базы данных. Регистрация больного, ведение истории болезни и выписка больного. Пользователи разрабатываемой базы данных. Процедура, формирующая расписание на заданный период времени.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 09.08.2012
Размер файла 821,8 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Введение

Основная цель выполнения индивидуального задания по дисциплине «Технологии баз данных» - углубить и закрепить теоретические знания, полученные в ходе освоения учебной программы, применить основные теоретические положения дисциплины на практике при создании базы данных.

Объектом проектирования в индивидуальном задании является медицинское учреждение - муниципальная больница. В процессе выполнения задания была создана база данных для данного учреждения. Используемая СУБД - Microsoft SQL Server 2008 R2 Developer.

1. Основная часть

1.1 Описание объекта проектирования

Объектом проектирования в данной работе является муниципальная больница. Больница -- вид гражданского стационарного медицинского учреждения, направленного на лечение больных и/или специализированную углубленную дифференциальную диагностику заболеваний в стационарных условиях. Задача данного учреждения заключается в том, чтобы в условиях модернизации здравоохранения организовать:

· оказание качественной лечебной, диагностической и профилактической медицинской помощи прикрепленному и обратившемуся населению в амбулаторно-поликлиническом звене учреждения;

· оказание высококвалифицированной и специализированной лечебно-диагностической медицинской помощи лицам, находящимся на лечении в стационаре;

· удовлетворение материальных и иных потребностей медицинского и другого персонала учреждения.

Никакие платы за оказанные услуги в этой больнице не взимаются, т.к. все лечение в муниципальной больнице оплачивается государством.

Представленные в работе функции медицинского учреждения:

· определение отделения, в котором будет проходить лечение поступивший больной

· назначение врача больному

· создание амбулаторной медицинской карты больного (в случае отсутствия таковой)

· оказание качественной медицинской помощи больному, которое заключается в приеме выписанных лечащим врачом лекарств

· ведение истории болезни

· выписка больного

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

1.2 Описание бизнес процессов

Поступление больного - непосредственное обращение лица в медицинское учреждение с какими-либо жалобами на свое здоровье.

Регистрация больного - документальное подтверждение обращения больного в больницу и назначение ему лечащего врача в соответствии с расписанием работы этого врача.

Ведение истории болезни - документальное подтверждение ухудшения и/или улучшения состояния здоровья обратившегося больного.

Лечение больного - оказание квалифицированной медицинской помощи в виде назначения лекарств или определенных процедур больному, направленных на улучшения его состояния здоровья.

Выписка больного - закрытие текущей истории болезни в связи с частичным или полным выздоровлением больного.

1.3 Описание пользователей базы данных

Пользователями разрабатываемой базы данных будут являться:

· Заведующий больницей

· Заведующий отделением

· Врач

· Медицинский регистратор

1.4 Описание цели и задач базы данных

Целью разрабатываемой базы данных является учет и хранение информации о поступивших больных и проведенных врачебных приемах.

Задачи по вводу данных

1. Ввод (редактирование, удаление) информации о больнице

[заведующий больницей]

2. Ввод (редактирование, удаление) информации об отделениях

[заведующий отделением]

3. Ввод (редактирование, удаление) информации о специальностях

[заведующий больницей]

4. Ввод (редактирование, удаление) информации о расписании

[мед. регистратор]

5. Ввод (редактирование, удаление) информации о приемах

[врач]

6. Ввод (редактирование, удаление) информации о пациентах

[мед. регистратор]

7. Ввод (редактирование, удаление) информации о сотрудниках

[заведующий больницей, заведующий отделением]

8. Ввод (редактирование, удаление) информации о мед. процедурах

[врач]

9. Ввод (редактирование, удаление) информации о медикаментах

[врач]

Задачи по обработке данных

1. Проверка корректности номера амбулаторной карты пациента

Задачи по выводу данных

1. Формирование отчета о расписании (на определенный период)

[мед. регистратор]

2. Формирование отчета о врачах проводивших прием у указанного больного [мед. регистратор, врач]

3. Формирование отчета об истории болезни пациента

[врач]

4. Формирование отчета о количестве врачей определенной специальности [заведующий больницей, заведующий отделением]

5. Формирование отчета обо всех приемах, проведенных указанным врачом [заведующий больницей, заведующий отделением]

6. Формирование информации об указанном медикаменте

[врач]

7. Формирование отчета обо всех сотрудника в отделениях (указанном отделении) [заведующий больницей, заведующий отделением]

8. Формирование отчета обо всех пациентах

[мед. регистратор]

9. Формирование отчета обо всех медикаментах

[врач]

10. Формирование отчета обо всех мед. процедурах

[врач]

1.5 Концептуальная модель

1.6 Реляционная модель

1. Пол (ПолИД, Название)

2. Диагноз (ДиагнозИД,Название, Описание)

3. Специальность (СпециальностьИД,Название)

4. Отделение (ОтделениеИД, Название)

5. Медикамент (МедикаментИД,Название,Противопоказания,Показания к применению)

6. МедПроцедура (МедПроцедураИД, Название, Описание)

7. Больница (БольницаИД, Название, СотрудникВОтделенииИД)

Внешний ключ СотрудникВОтделенииИД ссылается на СотрудникВОтделении (СотрудникВОтделенииИД)

8. СотрудникВОтделении (СотрудникВОтделенииИД, СотрудникИД, ОтделениеИД)

Внешний ключ СотрудникИД ссылается на Сотрудник (СотрудникИД)

Внешний ключ ОтделениеИД ссылается на Отделение (ОтделениеИД)

9. Сотрудник (СотрудникИД,Имя,Фамилия,Отчество, СпециальностьИД)

Внешний ключ СпециальностьИД ссылается на Специальность (СпециальностьИД)

10. Пациент (ПациентИД, Имя, Фамилия, Отчество, ПолИД, ДатаРождения, НомерАмбулаторнойКарты)

Внешний ключ ПолИД ссылается на Пол(ПолИД)

11. Прием (ПриемИД, ВремяПриема, ЗаметкаВрача, ПациентИД, ДиагнозИД, МедикаментИД, МедПроцедураИД)

Внешний ключ ПациентИД ссылается на Пациент (ПациентИД)

Внешний ключ ДиагнозИД ссылается на Диагноз (ДиагнозИД)

Внешний ключ МедикаментИД ссылается на Медикамент (МедикаментИД)

Внешний ключ МедПроцедураИД ссылается на МедПроцедура (МедПроцедураИД)

12. Расписание (РасписаниеИД, Кабинет, ПриемИД, СотрудникИД)

Внешний ключ ПриемИД ссылается на Прием (ПриемИД)

Внешний ключ СотрудникИД ссылается на Сотрудник (СотрудникИД)

1.7 Структура таблиц

Рисунок 1. Таблицы базы данных

Таблица «Отделение» («Departament»)

Таблица «Диагноз» («Diagnosis»)

Таблица «Персонал» («Employee»)

Таблица «Персонал в отделениях» («EmployeeInDepartaments»)

Таблица «Пол» («Gender»)

Таблица «Больница» («Hospital»)

Таблица «Медикаменты» («Medicine»)

Таблица «Мед. процедуры» («MedProcedure»)

Таблица «Пациент» («Pacient»)

Таблица «Специальность» («Post»)

Таблица «Прием» («Reception»)

Таблица «Расписание» («Schedule»)

1.8 Объекты базы данных, решающие поставленные задачи

база данные пользователь

1.8.1 Процедуры

1. Процедура, формирующая расписание на заданный период времени:

Листинг программного кода:

create proc GetAllSchedule

@date1 datetime = null,

@date2 datetime = null

as

select

rec.TimeReception as 'Время приема',

sc.Cabinet as 'Кабинет',

(e.Surname + ' ' + (select(LEFT(e.Name,1))) + '. ' + (select(LEFT(e.MiddleName,1))) + '.') as 'Врач',

p.Name as 'Специальность',

(pac.Surname + ' ' + (select(LEFT(pac.Name,1))) + '. ' + (select(LEFT(pac.MiddleName,1))) + '.') as 'Пациент'

from

Schedule sc inner join Reception rec

on sc.ReceptionID = rec.ID

inner join Employee e

on sc.DoctorID = e.ID,

Post p,

Pacient pac

where

e.PostID = p.ID and rec.PacientID = pac.ID

and

(rec.TimeReception >= @date1 or @date1 is null)

and

(rec.TimeReception <= @date2 or @date2 is null)

order by

rec.TimeReception

go

Вызов процедуры:

exec dbo.GetAllSchedule

@date1 = '2012-01-01',

@date2 = '2012-01-05'

go

Результат выполнения процедуры:

Вызов процедуры:

exec GetAllSchedule

@date1 = '2012-01-04' --начальная дата

go

Результат выполнения процедуры:

2. Процедура, формирующая отчет о врачах проводивших прием у указанного больного

Листинг программного кода:

create proc GetDoctorByPacientOrPost

@surname varchar(15) = null,

@name varchar(15) = null,

@middleName varchar(15) = null,

@date date = null,

@post varchar(60) = null

as

select distinct

e.Surname as 'Фамилия',

e.Name as 'Имя',

e.MiddleName as 'Отчество',

p.Name as 'Специальность'

from

Employee e inner join Post p on e.PostID = p.ID,

Schedule sc,

Reception rep,

Pacient pac

where

(sc.DoctorID = e.ID)

and

(p.Name = @post or @post is null)

and

(sc.ReceptionID in

(

select

rec.ID

from

Reception rec inner join Pacient p

on rec.PacientID = p.ID

where

(p.Surname = @surname or @surname is null)

and

(p.Name = @name or @name is null)

and

(p.MiddleName = @middleName or @middleName is null)

and

(@date = (select(CAST(rec.TimeReception as date))) or @date is null)

)

)

go

Вызов процедуры:

exec GetDoctorByPacientOrPost

@surname = 'Мельничук'

go

Результат выполнения процедуры:

Вызов процедуры:

exec GetDoctorByPacientOrPost

@surname = 'Филипинко',

@name = 'Алексей',

@date = '2011-12-15'

go

Результат выполнения процедуры:

Вызов процедуры:

exec GetDoctorByPacientOrPost

@ambulanceNo = 153568,

@post = 'Эндокринолог'

go

Результат выполнения процедуры:

3. Процедура, формирующая историю болезни пациента

Листинг программного кода:

create proc GetPacientHistory

@surname varchar(15) = null,

@name varchar(15) = null,

@middleName varchar(15) = null,

@date1 datetime = null,

@date2 datetime = null,

@nomer int = null

as

select

r.TimeReception as 'Время и дата приема',

p.Surname as 'Фамилия',

p.Name as 'Имя',

p.MiddleName as 'Отчество',

d.Name as 'Диагноз',

m.Name as 'Выписанное лекарство',

medproc.Name as 'Назначенная процедура',

r.Notice as 'Заметка врача'

from

Reception r

inner join Pacient p

on r.PacientID = p.ID

inner join Diagnosis d

on r.DiagnosisID = d.ID

inner join Medicine m

on r.MedicineID = m.ID

inner join MedProcedure medproc

on r.MedProcedureID = medproc.ID

where

(p.Surname = @surname or @surname is null)

and

(p.Name = @name or @name is null)

and

(p.MiddleName = @middleName or @middleName is null)

and

(r.TimeReception >= @date1 or @date1 is null)

and

(r.TimeReception <= @date2 or @date2 is null)

and

(p.AmbulanceNo = @nomer or @nomer is null)

go

Вызов процедуры:

exec GetPacientHistory

@middleName = 'Владимировна',

@name = 'Ирина'

go

Результат выполнения процедуры:

Вызов процедуры:

exec GetPacientHistory

@nomer = 154987,

@date1 = '2012-01-02'

go

Результат выполнения процедуры:

Вызов процедуры:

exec GetPacientHistory

@surname = 'Мельничук,

@date1 = '2011-05-04',

@date2 = '2012-01-11'

go

Результат выполнения процедуры:

4. Процедура, отображающая количество врачей указанной специальности

Листинг программного кода:

create proc GetDoctorsCountWithPost

@post varchar(60) = null,

@count int out

as

select distinct

COUNT(*) as 'Количество'

from

Employee e

inner join Post p

on e.PostID = p.ID

where

p.Name = @post

go

Вызов процедуры:

exec GetDoctorsCountWithPost

@post = 'Терапевт'

go

Результат выполнения процедуры:

5. Процедура, формирующая отчет обо всех приемах, проведенных указанным врачом

Листинг программного кода:

create proc GetAllReceptionsAtDoctor

@surname varchar(15) = null,

@name varchar(15) = null,

@middleName varchar(15) = null,

@post varchar(60) = null

as

select

r.TimeReception as 'Время и дата приема',

p.Surname as 'Фамилия',

p.Name as 'Имя',

p.MiddleName as 'Отчество',

p.AmbulanceNo as 'Номер абул. карты',

d.Name as 'Диагноз',

m.Name as 'Выписанное лекарство',

medproc.Name as 'Назначенная процедура',

r.Notice as 'Заметка врача'

from

Reception r

inner join Pacient p

on r.PacientID = p.ID

inner join Diagnosis d

on r.DiagnosisID = d.ID

inner join Medicine m

on r.MedicineID = m.ID

inner join MedProcedure medproc

on r.MedProcedureID = medproc.ID

where

r.ID in

(

select

sc.ID

from

Schedule sc

inner join Employee e

on sc.DoctorID = e.ID,

Post post

where

(e.PostID = post.ID)

and

(e.Surname = @surname or @surname is null)

and

(e.Name = @name or @name is null)

and

(e.MiddleName = @middleName or @middleName is null)

and

(@post = post.Name or @post is null)

)

go

Вызов процедуры:

exec GetAllReceptionsAtDoctor

@surname = 'Сидоров'

go

Результат выполнения процедуры:

exec GetAllReceptionsAtDoctor

@middleName = 'Дмитриевич',

@post = 'хирург'

go

Результат выполнения процедуры:

6. Процедура, отображающая информацию об указанном медикаменте

Листинг программного кода:

create proc GetInfoAboutMedicine

@name varchar(20)

as

select

m.Name as 'Название',

m.IndicationFor as 'Показания к применению',

m.Contraindication as 'Противопоказания'

from

Medicine m

where

m.Name = @name

go

Вызов процедуры:

exec GetInfoAboutMedicine

@name = 'Омепразол'

Go

Результат выполнения процедуры:

7. Процедура, формирующая отчет обо всех сотрудниках во всех (или выбранном) отделениях

Листинг программного кода:

create proc GetEmployeeInDepartaments

@departament varchar(60) = null

as

select

(e.Surname + ' ' + (select(LEFT(e.Name,1))) + '. ' + (select(LEFT(e.MiddleName,1))) + '.') as 'Врач',

dep.Name as 'Отделение'

from

EmployeeInDepartaments eid inner join Employee e

on eid.EmployeeID = e.ID

inner join Departament dep

on eid.DepartamentID = dep.ID

where

dep.Name = @departament or @departament is null

order by

dep.Name

go

Вызов процедуры:

exec GetEmployeeInDepartaments

Результат выполнения процедуры:

8. Процедура, формирующая список всех пациентов

Листинг программного кода:

create proc GetAllPacient

as

select

pac.Surname as 'Фамилия',

pac.Name as 'Имя',

pac.MiddleName as 'Отчество',

gend.Name as Пол',

pac.DateBirth as 'Дата рождения',

pac.AmbulanceNo as 'Номер абмул. карты'

from

Pacient pac

inner join Gender gend

on pac.GenderID = gend.ID

go

Вызов процедуры:

exec GetAllPacient

Результат выполнения процедуры:

9. Процедура, формирующая список всех врачей в указанном отделении и количество приемов, проведенных каждым из них.

Листинг программного кода:

create procedure GetCountOfReceptionsInChoosenDep

@name varchar(60)

as

select

e.Surname,

e.Name,

e.MiddleName,

p.Name,

count(sc.ReceptionID) as 'Количество приемов'

from

Employee e,

Post p,

Schedule sc

where

sc.DoctorID = e.ID

and

e.PostID = p.ID

group by

e.ID,e.Name,e.MiddleName,e.Surname,p.Name

having

e.ID in

(select EmployeeInDepartaments.EmployeeID from EmployeeInDepartaments

where EmployeeInDepartaments.DepartamentID = (select Departament.ID from Departament where Departament.Name = @name))

go

Вызов процедуры:

exec GetCountOfReceptionsInChoosenDep

@name = 'Хирургическое'

Результат выполнения процедуры:

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

Листинг программного кода:

create procedure GetMaxReceptionsAtPost

@post varchar(20)

as

select

q2.Surname as 'Фамилия',

q2.Name as 'Имя',

q2.MiddleName as 'Отчество',

q2.receptions as 'Количество приемов'

from

(

select

max(q1.receptions) as 'count'

from

(

select

e.Surname,e.Name,e.MiddleName,

count(sc.ReceptionID) as 'receptions'

from

Employee e,

Post p,

Schedule sc

where

sc.DoctorID = e.ID

and

e.PostID = p.ID

and

p.Name = @post

group by

e.ID,e.Surname,e.Name,e.MiddleName

) q1

) qmax,

(

select

e.Surname,e.Name,e.MiddleName,

count(sc.ReceptionID) as 'receptions'

from

Employee e,

Post p,

Schedule sc

where

sc.DoctorID = e.ID

and

e.PostID = p.ID

and

p.Name = @post

group by

e.ID,e.Surname,e.Name,e.MiddleName

) q2

where

q2.receptions = qmax.count

go

Вызов процедуры:

exec GetMaxReceptionsAtPost

@post = 'хирург'

Результат работы процедуры:

1.8.2 Триггеры

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»

Размещено на Allbest.ru


Подобные документы

  • Описание предметной области разрабатываемой базы данных для теннисного клуба. Обоснование выбора CASE-средства Erwin 8 и MS Access для проектирования базы данных. Построение инфологической модели и логической структуры базы данных, разработка интерфейса.

    курсовая работа [3,8 M], добавлен 02.02.2014

  • Понятие базы данных, модели данных. Классификация баз данных. Системы управления базами данных. Этапы, подходы к проектированию базы данных. Разработка базы данных, которая позволит автоматизировать ведение документации, необходимой для деятельности ДЮСШ.

    курсовая работа [1,7 M], добавлен 04.06.2015

  • Авторизация с каталогами проектирования базы данных магазина. Задачи базы данных: учет всех товаров, поиск и выдача данных о клиентах, адрес, телефоны, цена и наличие товара. Этапы проектирования базы данных. Схема данных, создание запросов и их формы.

    реферат [1,6 M], добавлен 22.10.2009

  • Схема взаимодействия подразделений предприятия. Выбор и обоснование технологии проектирования базы данных. Описание объектов базы данных. Разработка запросов на выборку, изменение, обновление и удаление данных. Интерфейсы взаимодействия с базой данных.

    курсовая работа [1,4 M], добавлен 25.05.2023

  • Разновидности систем управления базами данных. Анализ предметной области. Разработка структуры и ведение базы данных. Структурированный язык запросов SQL. Организация выбора информации из базы данных. Общие принципы проектирования экранных форм, макросов.

    курсовая работа [3,1 M], добавлен 26.02.2016

  • Разработка базы данных для ортопедического отделения больницы, которая имеет дополнительный триггер и процедуру для выполнения условия задачи. Использование программного продукта Oracle Application Express и языка MySql для создания базы данных.

    курсовая работа [208,6 K], добавлен 13.12.2014

  • Концептуальное и инфологическое проектирование базы данных в системе управления базами данных Microsoft Access. Физическое проектирование базы данных "Магазин спорттоваров". Тестирование и отладка базы данных, составление руководства пользователя.

    курсовая работа [6,7 M], добавлен 22.11.2022

  • Анализ предметной области, потребности различных категорий пользователей разрабатываемой базы данных. Описание концептуальной схемы и преобразование ее в реляционную БД. Создание ER-модели в среде ER-Win. Генерация файлов, разработка запросов в SQL.

    курсовая работа [786,4 K], добавлен 15.12.2013

  • Проектирование и реализация базы данных для обеспечения автоматизированного учета результатов футбольного турнира. Осуществление логического, а также физического проектирования базы данных. Описание запросов на выборку и манипуляцию данными на языке SQL.

    курсовая работа [1,9 M], добавлен 17.06.2012

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

    курсовая работа [3,0 M], добавлен 22.12.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.