Автоматизированная система для работы поликлиники
ГУАП
КАФЕДРА №43
ОТЧЕТ
О
КУРСОВОЙ РАБОТЕ
по
курсу: РАСПРЕДЕЛЕННЫЕ БАЗЫ ДАННЫХ
СТУДЕНТ
ГР. 4831 Н.М.Ткачев
Доц.
к.т.н А.В, Бржезовский
Санкт-Петербург
2012
Содержание
1. Описание
предметной области
1.1 Регистрация больных и пациентов
1.2
Ознакомление со справочной информацией
1.3 Запись на
прием к врачу
1.4 Просмотр
пациентом, сделанных врачом назначений
1.5
Редактирование пациентом или врачом информации о себе
1.6 Заполнение
врачом результатов осмотра
1.7 Выписка
врачом рецептов, направлений на анализ, а также заполнение результатов анализов
для своих пациентов
1.8
Составление расписания
2. Требования
к системе
2.1 Требование
к системе в целом
2.2 Требования
к функциям (задачам)
2.3 Требование
к обеспечению
3.
Концептуальная модель БД
4. Физическая
модель базы данных
4.1 Описание
хранимых процедур
4.1.1 Вставка
рецепта
4.1.2
Обновление данных о посещении
4.1.3 Привязка
пациента к талончику
4.1.4 Находит
максимальную дату среди талонов
4.1.5
Добавление талончика
4.1.6
определяет существование логина и пароля пациента в системе
4.1.7
Обновляет направление на анализ
4.1.8 Просмотр
анализов пациента
4.1.9
Добавление нового направления на анализ
4.1.10
Удаление направления на анализ
4.1.11
Возвращает типы анализов для посещения
4.1.12 Возвращает
даты направления на анализы для посещения
4.1.13
Направления на анализы для пациента
4.1.14 Типы
анализов для для посещения
4.1.15
Результаты анализов для талончика по типу и дате
4.1.16 Даты
направления на анализ для талончика по типу посещения и дате
4.1.17 Даты
направлений на анализы по идентификатору талончика и типу анализа
4.1.18
Информация о выписанных лекарствах для пациента
4.1.19
Возвращает пациентов на участке
4.1.20 Номер
участка по имени пациента
4.1.21
Пациенты, относящиеся к врачу территориально
4.1.22
Возвращает информацию о посещениях для пациента
4.1.23
Возвращает даты и времена посещений для доктора и пациента
4.1.24
Возвращает информацию о посещениях для доктора и пациента
4.1.25
Свободные талончики для доктора на текушую дату
4.1.26 Все
талончики для доктора на текушую дату
4.1.27 Все
талончики для доктора
4.1.28 Все
занятые талончики для доктора
4.1.29 Времена
посещений для врача и пациента на конкретную дату
4.1.30
Посещения пациента на конкретную дату
4.1.31
Длительность приема по идентификатору посещения
4.1.32
Количество талончиков для доктора
4.1.33
Лекарства, выписанные врачом
4.1.34 Отчёт
работы врачей в поликлиннике
4.1.35 Поиск
врачей по специальности и участку
4.1.36 Поиск
логина и пароля врача в системе
4.1.37 Поиск
специальностей врачей на участке
4.1.38
Обновление информации о враче
4.1.39 Номер
участка по улице
4.1.40
Свободные кабинеты для дня недели и смены
4.1.41 Номера
кабинетов для доктора, где у него идёт прием
4.1.42
Расписание по имени доктора
4.1.43 Рабочие
смены для доктора по его логину, дню недели и номеру кабинета
4.1.44 Рабочие
смены для доктора по его логину и дню недели
4.1.45 Вставка
строки расписания
4.1.46 Общее
расписание
4.1.47
Удаления строки расписания
4.1.48
Количество отработанных врачом часов в неделю
4.2 Описание
триггеров
4.2.1 Триггер
instead of insert для таблицы расписание
4.2.2 Триггер
instead of delete для таблицы пациент
5.Интерфейс
пользователя
5.1 Главное
окно приложения
5.2 гостевое
меню
5.3 Меню
пациента
5.4 Меню врача
5.5 Меню
модератора
6.Репликация
данных
7.Хранилище и
отчеты
7.1. Схема
хранилища
7.2 Отчеты
Список
литературы
1. Описание предметной области
Данная курсовая работа посвящена разработке
автоматизированной системы для работы поликлиники. Основные задачи, которые
решает автоматизированная система:
· Регистрация больных и пациентов
· Ознакомление со справочной информацией
· Запись на прием к врачу
· Просмотр пациентом, сделанных врачом
назначений
· Редактирование пациентом или врачом
информации о себе
· Заполнение врачом результатов осмотра
· Выписка врачом рецептов, направлений на
анализ, а также заполнение результатов анализов для своих пациентов
· Составление расписания
1.1 Регистрация больных и пациентов
Пользователь, если у него нет аккаунта в информационной
системе, может зарегистрироваться, введя свои данные. Удаление аккаунта может
осуществить модератор. Регистрацию врачей может осуществлять только модератор.
.2 Ознакомление со справочной информацией
Данная информационная система позволяет знакомиться со
следующей информацией, даже, если у пользователя нет аккаунта в информационной
системе:
просмотр расписания
просмотр пациентов у врача
просмотр всех врачей (по специальности и по участку и
специальности)
выписанные врачом лекарства
нагрузка врача(часов в неделю)
отчет о работе врачей за весь период работы в поликлинике
статистика посещений пациента
просмотр пациентов по участкам
выписанные лекарства для пациента
выписанные анализы для пациента
.3 Запись на прием к врачу
поликлиника автоматизированный интерфейс
ьзователь может забронировать любой свободный талончик. Сразу
после этого талончик пропадет в данном меню, а в личном кабинете пациента и
врача появится запись об этом талончике.
.4 Просмотр пациентом, сделанных врачом
назначений
В личном кабинете пациента отображается информация о
выписанных лекарствах, направлениях на анализы.
1.5 Редактирование пациентом или врачом
информации о себе
В личном кабинете врача/пациента отображается личная
информация. Разрешается её редактировать. Есть возможность редактирования
логина и пароля входа.
.6 Заполнение врачом результатов осмотра
После того, как пациент пришёл на прием, врач заносит
результат осмотра в информационную систему, а также заполняет рекомендации по
лечению.
.7 Выписка врачом рецептов, направлений на анализ,
а также заполнение результатов анализов для своих пациентов.
Врач имеет возможность выписать/заполнить направление на
анализ, выписать рецепт по результатам посещения.
.8 Составление расписания
Модератор осуществляет создание/редактирование расписания.
Учитываются следующие ограничения:
набор полей день недели, смена, кабинет уникален
-набор полей врач, день недели, смена уникален
После добавления строки расписания, в системе генерируются
талончики на 10 дней вперед для этой строки.
2. Требования к системе
2.1 Требование к системе в целом
Разрабатываемая системе должна
Иметь возможность для технического обслуживания
квалифицированным персоналом
Иметь возможность осуществления ремонта при возникновении
неполадок в работе
Должна быть уникальной и независимой в технических решениях
по сравнению с автоматизированными системами сторонних разработчиков.
Должна осуществлять работу в соответствии с действующими
стандартами, принятыми в предметной области работы автоматизированной системы
Система должна быть универсальной для всех филиалов и иметь
возможности установки копий на рабочие станции операторов.
Эксплуатация программного обеспечения не должна наносить вред
как эксплуатирующему персоналу так и технике, на которой предполагается
эксплуатация программного обеспечения.
Программный комплекс должен оснащаться сопутствующей
технической документации и иметь возможность обучения работников навыкам
использования автоматизированной системе на рабочих местах
2.2 Требования к функциям (задачам)
· Программа должна выполнять возложенные на
неё задачи на филиалах эксплуатирующего предприятия и иметь возможность связи
по информационным каналам с центральным офисом
· Каждая выполняемая в автоматизированной
системе операция не должна иметь слишком больших временных затрат на её
исполнение.
· Все задачи, решаемые системой должны быть
решены быстро и корректно
2.3 Требование к обеспечению
· Разрабатываемая система должна реализовать
свои задачи с применением таких средств, как СУБД MSSQL 2008 и операционная
система Windows7
· В процессе эксплуатации программа не
должна требовать установки дополнительного программного обеспечения, кроме
указанных ранее.
· Программа не должна терять данные при
возникновениях в неисправностях, как в программной так и в аппаратной составляющей
автоматизированной системы.
3. Концептуальная модель БД
Концептуальная модель разработана в среде PowerDesigner. Она
представляет собой систему из 16 сущностей.
Рис 3.1 Концептуальная модель базы данных
4. Физическая модель базы данных
Физическая модель представлена на рис. 4.1. Модель выполнена
среде Powerdesigner.
Рис 4.1 Физическая модель базы данных
.1 Описание хранимых процедур
4.1.1 Вставка рецепта
CREATE PROCEDURE [add_recept_to_ticket](@ticket_id
int,@drug_id int,@drug_count int)into рецепт(@ticket_id, @drug_id,
@drug_count,NEWID())
4.1.2 Обновление данных о посещении
CREATE PROCEDURE
[update_ticket_type_zhalob_diagnoz_lechenie](@id int, @type int, @zhalob
varchar(max),@diagnoz varchar(max),@lechenie
varchar(max))посещениепосещение.тип_посещения = @type,
посещение.жалобы = @zhalob,
посещение.диагноз = @diagnoz,
посещение.лечение = @lechenieпосещение.идентификатор_посещения
= @id
4.1.3 Привязка пациента к талончику
CREATE PROCEDURE [update_ticket_patient_login](@patient_login
varchar(50),@ticket_id int)посещениелогин_пациента =
@patient_loginидентификатор_посещения = @ticket_id
4.1.4 Находит максимальную дату среди талонов
CREATE PROCEDURE [ticket_max_date]@date datetime
exists(select *посещение)@date =
MAX(посещение.дата_приема)посещение@date =
GETDATE()-DAY(0)(@date<getdate())@date = getdate()-day(0)@date
4.1.5 Добавление талончика
CREATE PROCEDURE [insert_into_ticket](@table_id
int,@ticket_time time(7),@date date)into
посещение(идентификатор_расписания,время_приема,дата_приема)
values(@table_id,@ticket_time,@date)
4.1.6 определяет существование логина и пароля
пациента в системе.
CREATE PROCEDURE [patient_login](@login varchar(50),@password
varchar(50))@number int ;@number =0;(EXISTS(select *пациентпароль = @password
and логин_пациента = @loginby логин_пациента ))@number = COUNT(*)пациентпароль
= @password and логин_пациента = @loginby логин_пациента@number
4.1.7 Обновляет направление на анализ
CREATE PROCEDURE [update_analyze](@id int,@rezult
varchar(max))направление_на_анализрезультат = @rezultидентификатор_направления
= @id
4.1.8 Просмотр анализов пациента
CREATE PROCEDURE [patient_analize](@patient_id
varchar(50))посещение.дата_приема, направление_на_анализ.дата_сдачи,направление_на_анализ.тип_анализа,направление_на_анализ.результатпациент
inner join посещение on посещение.логин_пациента = пациент.логин_пациентаjoin
направление_на_анализ on направление_на_анализ.идентификатор_посещения = посещение.идентификатор_посещенияпациент.логин_пациента
= @patient_id
4.1.9 Добавление нового направления на анализ
CREATE PROCEDURE [insert_analyze](@id int,@type
varchar(max),@date date)into направление_на_анализ
(идентификатор_посещения,тип_анализа, дата_сдачи)(@id, @type,
@date)
4.1.10 Удаление направления на анализ.
CREATE PROCEDURE [delete_analyze](@id
int)направление_на_анализнаправление_на_анализ.идентификатор_направления =@id
4.1.11 Возвращает типы анализов для посещения
CREATE PROCEDURE [analyze_type_for_ticket_id] (@ticket_id
int)направление_на_анализ.тип_анализанаправление_на_анализнаправление_на_анализ.идентификатор_посещения
= @ticket_id
4.1.12 Возвращает даты направления на анализы для
посещения
CREATE PROCEDURE [analyze_date_for_ticket_id_and_type]
(@ticket_id int,@type
varchar(max))направление_на_анализ.дата_сдачинаправление_на_анализнаправление_на_анализ.идентификатор_посещения
= @ticket_id and направление_на_анализ.тип_анализа = @type
4.1.13 Направления на анализы для пациента
CREATE PROCEDURE [analizes_for_patient_name](@patient_name
varchar(50))направление_на_анализ.дата_сдачи,
направление_на_анализ.тип_анализа,
направление_на_анализ.результатнаправление_на_анализ inner join посещение on
посещение.идентификатор_посещения = направление_на_анализ.идентификатор_посещенияjoin
пациент on пациент.логин_пациента = посещение.логин_пациентапациент.имя =
@patient_name
4.1.14 Типы анализов для для посещения
CREATE PROCEDURE [analize_type_for_ticket_id](@ticket_id
int)distinct направление_на_анализ.тип_анализанаправление_на_анализнаправление_на_анализ.идентификатор_посещения
= @ticket_id
4.1.15 Результаты анализов для талончика по типу
и дате
CREATE PROCEDURE
[analize_result_for_ticket_id_and_type_and_date](@ticket_id int,@type
varchar(max),@date date)направление_на_анализ.результатнаправление_на_анализнаправление_на_анализ.идентификатор_посещения
= @ticket_idнаправление_на_анализ.тип_анализа =
@typeнаправление_на_анализ.дата_сдачи = @date
4.1.16 Даты направления на анализ для талончика по типу посещения
и дате
CREATE PROCEDURE
[analize_date_for_ticket_id_and_type_and_date](@ticket_id int,@type
varchar(max),@date date)направление_на_анализ.дата_сдачи,
направление_на_анализ.идентификатор_направления,направление_на_анализ.результатнаправление_на_анализнаправление_на_анализ.идентификатор_посещения
= @ticket_idнаправление_на_анализ.тип_анализа =
@typeнаправление_на_анализ.дата_сдачи = @date
4.1.17 Даты направлений на анализы по
идентификатору талончика и типу анализа
CREATE PROCEDURE [analize_date_for_ticket_id_and_type](@ticket_id
int,@type varchar(max))направление_на_анализ.дата_сдачи,
направление_на_анализ.идентификатор_направления,направление_на_анализ.результатнаправление_на_анализнаправление_на_анализ.идентификатор_посещения
= @ticket_idнаправление_на_анализ.тип_анализа = @type
4.1.18 Информация о выписанных лекарствах для пациента
CREATE PROCEDURE [drug_for_patient](@patient_id
varchar(50))посещение.дата_приема,
лекарство.наименование,рецепт.количествопациент inner join посещение on
посещение.логин_пациента = пациент.логин_пациентаjoin рецепт on
рецепт.идентификатор_посещения = посещение.идентификатор_посещенияjoin
лекарство on лекарство.идентификатор_лекарства =
рецепт.идентификатор_лекарствапациент.логин_пациента = @patient_id
4.1.19 Возвращает пациентов на участке
CREATE PROCEDURE [patients_for_uch](@uch_num
int)пациент.имя,улица.наименование_улицы,пациент.логин_пациентапациент inner
join улица on пациент.идентификатор_улицы = улица.идентификатор_улицыjoin
участок on участок.номер_участка = улица.номер_участкаучасток.номер_участка =
@uch_num
4.1.20 Номер участка по имени пациента
CREATE PROCEDURE [number_uch_for_patient_name](@name
varchar(50))участок.номер_участкаучасток inner join улица on
улица.номер_участка = участок.номер_участкаjoin пациент on
пациент.идентификатор_улицы = улица.идентификатор_улицы@name = пациент.имя
4.1.21 Пациенты, относящиеся к врачу
территориально
CREATE PROC [patients_to_doctor](@doctor_name
varchar(50))@doc_id varchar(50);@doc_id=врач.логин_врачаврач@doctor_name =
врач.имяпациент.имяпациент inner join улица on пациент.идентификатор_улицы =
улица.идентификатор_улицыjoin участок on участок.номер_участка =
улица.номер_участкаjoin врач on врач.номер_участка =
участок.номер_участкаврач.логин_врача = @doc_id
4.1.22 Возвращает информацию о посещениях для
пациента
CREATE PROCEDURE [tickets_to_patients](@patient_id
varchar(50))посещение.дата_приема,посещение.время_приема,кабинет.номер_кабинета,
врач.длительность_приема ,врач.имя,
специальность.наименование_специальности,посещение.лечениепациент inner join
посещение on посещение.логин_пациента = пациент.логин_пациентаjoin расписание
on расписание.идентификатор_расписания = посещение.идентификатор_расписанияjoin
врач on врач.логин_врача = расписание.логин_врачаjoin специальность on
специальность.идентификатор_специальности =
врач.идентификатор_специальностиjoin кабинет on кабинет.номер_кабинета =
расписание.номер_кабинетапациент.логин_пациента = @patient_id
4.1.23 Возвращает даты и времена посещений для
доктора и пациента
CREATE PROCEDURE
[tickets_time_and_id_for_doctor_and_patient](@doc_login
varchar(50),@patient_name varchar(50))посещение.дата_приема
посещение.время_приема,посещение.идентификатор_посещенияврач inner join
расписание on врач.логин_врача = расписание.идентификатор_расписанияjoin
посещение on посещение.идентификатор_расписания =
расписание.идентификатор_расписанияjoin пациент on пациент.логин_пациента =
посещение.логин_пациентаврач.логин_врача = @doc_login and пациент.имя =
@patient_name
4.1.24 Возвращает информацию о посещениях для
доктора и пациента
CREATE PROCEDURE [tickets_for_doctor_and_patient](@doc_name
varchar(50),@patient_name varchar(50))посещение.дата_приема ,
посещение.диагноз, посещение.диагноз ,посещение.жалобы, посещение.лечение,
посещение.тип_посещения, направление_на_анализ.дата_сдачи,
направление_на_анализ.тип_анализа,
направление_на_анализ.результат,лекарство.наименование, рецепт.количествоврач
inner join расписание on врач.логин_врача =
расписание.идентификатор_расписанияjoin посещение on посещение.идентификатор_расписания
= расписание.идентификатор_расписанияjoin рецепт on
рецепт.идентификатор_посещения = посещение.идентификатор_посещенияjoin
лекарство on лекарство.идентификатор_лекарства =
рецепт.идентификатор_рецептаjoin пациент on пациент.логин_пациента =
посещение.логин_пациентаjoin направление_на_анализ on
направление_на_анализ.идентификатор_посещения =
посещение.идентификатор_посещенияврач.имя = @doc_name and пациент.имя =
@patient_name
4.1.25 Свободные талончики для доктора на текушую дату
CREATE PROCEDURE [tickets_for_docName_dateFREE] (@docname
varchar(50),@date date)@doclogin varchar(50)@doclogin =
врач.логин_врачаврачврач.имя = @docname
посещение.время_приема,
посещение.логин_пациента,посещение.идентификатор_посещенияпосещение inner join
расписание on расписание.идентификатор_расписания =
посещение.идентификатор_расписанияjoin врач on врач.логин_врача =
расписание.логин_врача(врач.логин_врача = @doclogin and посещение.дата_приема =
@date) and посещение.логин_пациента is null
4.1.26 Все талончики для доктора на текушую дату
CREATE PROCEDURE [tickets_for_docName_date] (@docname
varchar(50),@date date)@doclogin varchar(50)@doclogin =
врач.логин_врачаврачврач.имя = @docnameпосещение.время_приемапосещение inner
join расписание on расписание.идентификатор_расписания =
посещение.идентификатор_расписанияjoin врач on врач.логин_врача =
расписание.логин_врачаврач.логин_врача = @doclogin and посещение.дата_приема =
@date
4.1.27 Все талончики для доктора
CREATE PROCEDURE [tickets_for_docName] (@docname
varchar(50))@doclogin varchar(50)@doclogin = врач.логин_врачаврачврач.имя =
@docnameпосещение.время_приемапосещение inner join расписание on
расписание.идентификатор_расписания = посещение.идентификатор_расписанияjoin
врач on врач.логин_врача = расписание.логин_врачаврач.логин_врача = @doclogin
4.1.28 Все занятые талончики для доктора
CREATE PROCEDURE [tickets_for_doc_login] (@doclogin
varchar(50))distinct пациент.имя ,пациент.логин_пациентапациент inner join
посещение on посещение.логин_пациента = пациент.логин_пациентаjoin расписание
on расписание.идентификатор_расписания = посещение.идентификатор_расписанияjoin
врач on врач.логин_врача = расписание.логин_врачаврач.логин_врача = @doclogin
4.1.29 Времена посещений для врача и пациента на
конкретную дату
CREATE PROCEDURE
[tickets_date_for_doc_login_patient_login_date] (@doclogin
varchar(50),@patient_login varchar(50),@date date)distinct
посещение.время_приема, посещение.идентификатор_посещенияпациент inner join
посещение on посещение.логин_пациента = пациент.логин_пациентаjoin расписание
on расписание.идентификатор_расписания = посещение.идентификатор_расписанияjoin
врач on врач.логин_врача = расписание.логин_врачаврач.логин_врача = @doclogin
and пациент.логин_пациента =@patient_login and посещение.дата_приема =@date
4.1.30 Посещения пациента на конкретную дату
CREATE PROCEDURE
[select_tickets_for_patient_id_and_date](@patient_id varchar(50),@date
date)посещение.время_приема, врач.длительность_приемапациент inner join
посещение on пациент.логин_пациента = посещение.логин_пациентаjoin расписание
on посещение.идентификатор_расписания = расписание.идентификатор_расписанияjoin
врач on врач.логин_врача = расписание.логин_врача посещение.логин_пациента
= @patient_id and посещение.дата_приема = @date
4.1.31 Длительность приема по идентификатору
посещения
CREATE PROCEDURE
[select_length_time_for_ticket_id](@ticket_id
int)врач.длительность_приемапосещение inner join расписание on
посещение.идентификатор_расписания = расписание.идентификатор_расписанияjoin
врач on врач.логин_врача = расписание.логин_врача посещение.идентификатор_посещения
= @ticket_id
.1.32 Количество талончиков для специальностиPROCEDURE
[number_ticket_for_spec](@spec_name varchar(50))@spec_id int@spec_id =
специальность.идентификатор_специальностиспециальностьспециальность.наименование_специальности
=
@spec_nameспециальность.наименование_специальности,COUNT(идентификатор_посещения)
from специальность inner join врач on врач.идентификатор_специальности =
специальность.идентификатор_специальностиjoin расписание on
расписание.логин_врача = врач.логин_врачаjoin посещение on
посещение.идентификатор_расписания =
расписание.идентификатор_расписания@spec_id =
специальность.идентификатор_специальностинаименование_специальности
4.1.32 Количество талончиков для доктора
CREATE PROCEDURE [number_ticket_for_docname](@doc_name
varchar(50))@doc_id int@doc_id = врач.логин_врачаврачврач.имя =
@doc_nameврач.имя,COUNT(посещение.идентификатор_посещения)врач inner join
расписание on расписание.логин_врача = врач.логин_врачаjoin посещение on
посещение.идентификатор_расписания = расписание.идентификатор_расписания@doc_id
= врач.логин_врачаврач.имя
4.1.33 Лекарства, выписанные врачом
CREATE PROCEDURE [drug_for_doctor](@doctor_name
varchar(50))@doc_login varchar(50)@doc_login = врач.логин_врачаврачврач.имя =
@doctor_nameимя,лекарство.наименованиеврач inner join расписание on
расписание.логин_врача = врач.логин_врачаjoin посещение on
расписание.идентификатор_расписания = посещение.идентификатор_расписанияjoin
рецепт on посещение.идентификатор_посещения =
рецепт.идентификатор_посещенияjoin лекарство on
лекарство.идентификатор_лекарства = рецепт.идентификатор_лекарства @doc_login
= врач.логин_врача
4.1.34 Отчёт работы врачей в поликлиннике
CREATE PROCEDURE [doctor_statistic]врач.имя,isnull(count
(distinct посещение.логин_пациента),0)as
'количествопосещений',isnull(COUNT(distinct пациент.логин_пациента),0)as
'количествопациентов',isnull (sum(distinct рецепт.количество),0) as
'количестволекарств',isnull (count( distinct направление_на_анализ.идентификатор_направления),0)AS
'количествовыписанныханализов',isnull (count( distinct
направление_на_анализ.результат),0) as 'количествополученныхрезультатов'врач
inner join расписание on расписание.логин_врача = врач.логин_врачаjoin посещение
on посещение.идентификатор_расписания = расписание.идентификатор_расписанияjoin
пациент on пациент.логин_пациента = посещение.логин_пациента and
посещение.логин_пациента is not nulljoin рецепт on
рецепт.идентификатор_посещения = посещение.идентификатор_посещенияjoin
направление_на_анализ on направление_на_анализ.идентификатор_посещения =
посещение.идентификатор_посещения groupby врач.имя
4.1.35 Поиск врачей по специальности и участку
CREATE PROCEDURE [doctors_for_spec_and_uch](@num_uch
int,@spec_name varchar(50))врач.имяучасток inner join врач on
врач.номер_участка = участок.номер_участкаjoin специальность on
специальность.идентификатор_специальности =
врач.идентификатор_специальностиучасток.номер_участка = @num_uch and
специальность.наименование_специальности = @spec_name
4.1.36 Поиск логина и пароля врача в системе
CREATE PROCEDURE [doctor_login](@login varchar(50),@password
varchar(50))@number int ;@number =0;(EXISTS(select *врачпароль = @password and
логин_врача = @loginby логин_врача ))@number = COUNT(*)врачпароль = @password
and логин_врача = @loginby логин_врача@number
4.1.37 Поиск специальностей врачей на участке
CREATE PROCEDURE [spec_on_uch](@num_uch int)distinct
специальность.наименование_специальностиспециальность inner join врач on
врач.идентификатор_специальности =
специальность.идентификатор_специальностиjoin участок on участок.номер_участка
= врач.номер_участка@num_uch = участок.номер_участка
4.1.38 Обновление информации о враче
CREATE PROCEDURE [update_doctor](@old_login varchar(50),@name
varchar(50),@date_prac date,@date_b date,@adress varchar(max),@login
varchar(50),@password varchar(50))врачимя = @name,
врач.начало_практики = @date_prac,
врач.дата_рождения = @date_b,
врач.адрес = @adress,
врач.логин_врача = @login,
врач.пароль = @passwordврач.логин_врача = @old_login
4.1.39 Номер участка по улице
CREATE PROCEDURE [uch_id_for_street_id](@street_id
int)улица.номер_участкаулицаулица.идентификатор_улицы = @street_id
4.1.40 Свободные кабинеты для дня недели и смены
CREATE PROCEDURE [rooms_for_day_smena](@day int, @smena
int)@count_smena int@count_smena =
COUNT(*)сменакабинет.номер_кабинетакабинетномер_кабинета not
inрасписание.номер_кабинета
)расписание inner join смена on смена.идентификатор_смены =
расписание.идентификатор_сменырасписание.идентификатор_дня_недели = @day and
смена.идентификатор_смены = @smena
)
4.1.41 Номера кабинетов для доктора, где у него
идёт прием
CREATE PROCEDURE [room_num_for_doc_id_and_day](@id
varchar(50),@id_day int)distinct кабинет.номер_кабинетакабинет inner join
расписание on расписание.номер_кабинета =
кабинет.номер_кабинетарасписание.логин_врача = @id and
расписание.идентификатор_дня_недели=@id_day
4.1.42 Расписание по имени доктора
CREATE PROC [rasp_for_doctor_name](@doctor_name varchar(50))@doctor_login
varchar(50);@doctor_login = врач.логин_врачаврачврач.имя =
@doctor_nameрасписание.идентификатор_расписания,
название_дня_недели,время_начала,
смена.время_конца,кабинет.номер_кабинета,врач.имя from врачjoin расписание on
врач.логин_врача =расписание.логин_врачаjoin смена on смена.идентификатор_смены
= расписание.идентификатор_сменыjoin кабинет on расписание.номер_кабинета =
кабинет.номер_кабинетаjoin день_недели on расписание.идентификатор_дня_недели =
день_недели.идентификатор_дня_неделиврач.логин_врача = @doctor_login
4.1.43 Рабочие смены для доктора по его логину,
дню недели и номеру кабинета
CREATE PROCEDURE [smena_for_doc_id_and_day_and_room](@id
varchar(50),@id_day int,@room int)идентификатор_смены,
идентификатор_расписаниякабинет inner join расписание on
расписание.номер_кабинета = кабинет.номер_кабинетарасписание.логин_врача = @id
and расписание.идентификатор_дня_недели=@id_dayрасписание.номер_кабинета =
@room
4.1.44 Рабочие смены для доктора по его логину и
дню недели
CREATE PROCEDURE [smena_for_day_and_doctor](@day int,
@doc_login varchar(50))смена.идентификатор_смены сменасмена.идентификатор_смены
not
in(расписание.идентификатор_сменырасписаниерасписание.идентификатор_дня_недели
= @day and расписание.логин_врача = @doc_login
)
4.1.45 Вставка строки расписания
CREATEPROCEDURE
[insert_into_table](@doc_idvarchar(50),@num_cabint,@day_idint,@smenaint)into
расписание
(логин_врача,номер_кабинета,идентификатор_дня_недели,идентификатор_смены,msrepl_tran_version)(@doc_id,
@num_cab,@day_id,@smena,NEWID())
4.1.46 Общее расписание
CREATE PROCEDURE
[get_table_id]расписание.идентификатор_расписания, смена.время_начала,
смена.время_конца,врач.длительность_приема, идентификатор_дня_неделирасписание
inner join смена on смена.идентификатор_смены =
расписание.идентификатор_сменыjoin врач on врач.логин_врача =
расписание.логин_врача by идентификатор_расписания
4.1.47 Удаления строки расписания
CREATE PROCEDURE [delete_table](@id
int)расписаниерасписание.идентификатор_расписания = @id
4.1.48 Количество отработанных врачом часов в
неделю
CREATE PROCEDURE [doctor_work_time]врач.имя
,врач.номер_участка,
специальность.наименование_специальности,isnull(sum(DATEDIFF(HOUR,смена.время_начала,время_конца)),0)
AS 'количествочасов' специальность inner join врач on
специальность.идентификатор_специальности =
врач.идентификатор_специальностиjoin расписание on расписание.логин_врача =
врач.логин_врачаjoin смена on смена.идентификатор_смены =
расписание.идентификатор_сменыby врач.имя, специальность.наименование_специальности,врач.номер_участкаby
[количество часов]desc
4.2 Описание триггеров
.2.1 Триггер insteadofinsertдля таблицы
расписание
При добавлении строки расписания проверяется есть ли кабинет
из вставляемой строки в справочнике кабинет (таблица кабинет).Если его нет, то
данный кабинет добавляется в справочник.
Впротивномслучаепроисходитобычноедобавление.trigger
[dbo].[yyy][dbo].[расписание]of insert@numint@num =
inserted.номер_кабинетаinserted(not exists
(кабинет.номер_кабинетакабинеткабинет.номер_кабинета = @num
)
)into кабинет values(@num, '',NEWID())расписание
(логин_врача,номер_кабинета, идентификатор_дня_недели,
идентификатор_смены,msrepl_tran_version)логин_врача,номер_кабинета,
идентификатор_дня_недели, идентификатор_смены,msrepl_tran_versioninserted
.2.2Триггерinsteadofdeleteдлятаблицыпациент
При удалении модератором пациента(только он обладает такими
правами) стираются все записи из таблицы посещение, касающиеся удаляемого
пациента.trigger [dbo].[patient_delete] on [dbo].[пациент]of delete@id varchar(50)посещение
set логин_пациента = NULLпосещение.идентификатор_посещенияin
(идентификатор_посещенияпациент innerjoin посещение
onпациент.логин_пациента = посещение.логин_пациентаjoin deleted on
deleted.логин_пациента = пациент.логин_пациента.логин_пациента =
посещение.логин_пациента
)@id= логин_пациентаdeletedпациентпациент.логин_пациента =
@id
5.Интерфейс пользователя
Интерфейс пользователя осуществлен с помощью программных
средств среды разработкиvisualstudio 2010 на языке программирования C# при помощи
интерфейса программирования приложений windowsforms.
.1 Главное окно приложения
При загрузке приложения пользователь увидит данное окно.
Внешний вид окна изображен на рисунке. Пользователь имеет возможность выбрать,
под каким типом учётной записи он хочет зайти. Если же у него нет учётной
записи, пользователь может войти как гость, либо зарегистрироваться как
пациент. В нижней части окна имеется возможность выбора базы данных, с которой
будет напрямую работать интерфейс.
Рис 5.1.1 Вид главного окна приложения
5.2 Гостевое меню
Если в основном меню нажать на кнопку войти как гость, то
пользователь увидит гостевое меню. Внешний вид окна изображен на рисунке 5.2.2
Рис 5.2.1 Вид гостевого меню
При нажатии повкладке “врачи” появится меню, представленное
на рисунке 5.2.2:
Рис 5.2.2 вид меню “врачи” гостевого меню
При нажатии по вкладке “пациенты” появится следующее меню,
представленное на рисунке 5.2.3:
Рис 5.2.3 вид меню “пациенты” гостевого меню
Рассмотрим, что произойдет при нажатии на каждое меню.
Сначала рассмотрим вкладку врачи.
При нажатии на “посмотреть расписание” пользователь видит
окно, представленное на рис. 5.2.4. Нужно выбрать специальность из списка,
будут показаны имена соответствующих враче. Нажав на кнопку показать расписание
на экране появится расписание.
Рис 5.2.4 вид меню “просмотр расписания” гостевого меню
При нажатии на “просмотр пациентов у врача” пользователь
видит окно, представленное на рис.5.2.5. Выбрав из списка доктора, и нажав на
кнопку “показать”, на экране появится соответствующие врачи.
Рис 5.2.5 вид меню “просмотр пациентов у доктора” гостевого
меню
При нажатии на “просмотр всех врачей по специальности”
пользователь видит окно, представленное на рис.5.2.6. Выбрав специальность, на
экране появятся соответствующие доктора.
Рис 5.2.6 вид меню “просмотр всех врачей по специальности”
гостевого меню
При нажатии на “просмотр всех врачей по специальности и
участку” пользователь видит окно, представленное на рис.5.2.7. После выбора
участка, появится выбор из соответствующих специальностей. После выбора одной
из них на экране появится имена соответствующих врачей
Рис 5.2.7 вид меню “просмотр врачей по участку и
специальности” гостевого меню
При нажатии на “выписанные лекарства” пользователь видит
окно, представленное на рис.5.2.8. После выбора врача на экране появятся
выписанные врачом лекарства.
Рис 5.2.8 вид меню “выписанные лекарства” гостевого меню
При нажатии на “количество часов в неделю” пользователь видит
окно, представленное на рис.5.2.9. На экране появится отчёт о количестве часов
работы врача в неделю.
Рис 5.2.9 вид меню “ количество часов в неделю ” гостевого
меню
При нажатии на “статистика врачей” пользователь видит окно,
представленное на рис.5.2.10. На экране появится комплексный отчёт о работе
врача.
Рис 5.2.10 вид меню “ статистика врачей ” гостевого меню
Далее рассмотрим вкладку “пациенты”. При нажатии на
“статистика посещений” пользователь видит окно, представленное на рис.5.2.11.
После выбора пациента, увидим его посещения.
Рис 5.2.11 вид меню “ статистика посещений ” гостевого меню
При нажатии на “просмотр пациентов” пользователь видит окно,
представленное на рис.5.2.12. Выбираем участок, на экране появляются соответствующие
пациенты.
Рис 5.2.12 вид меню “ просмотр пациентов ” гостевого меню
При нажатии на “выписанные лекарства” пользователь видит
окно, представленное на рис.5.2.13. Выбираем пациента, на экране появляются
выписанные лекарства.
Рис 5.2.13 вид меню “ выписанные лекарства ” гостевого меню
При нажатии на “анализы” пользователь видит окно,
представленное на рис.5.2.14
Выбираем пациента, на экране появляются выписанные пациенту
анализы.
Рис 5.2.14 вид меню “ анализы ” гостевого меню
5.3 Меню пациента
После нажатия на кнопку войти как пациент гостевого меню
пользователь увидит меню, представленное на рисунке 5.3.1.Пациент может ввести
свой логин и пароль, либо зарегистрироваться. Сначала рассмотрим случай, когда
пользователь хочет зарегистрироваться.
Рис 5.3.1 вид меню “ идентификация пациента ” меню пациента
По нажатию на кнопку “зарегистрироваться” пользователь увидит
меню, представленное на рисунке 5.3.2. Звездочкой отмечены обязательные для
заполнения поля.
Рис 5.3.2 вид меню “ регистрация пользователя ” меню пациента
При нажатии на кнопку “проверить” появится сообщение либо
логин свободен(рис.5.3.3), либо занят(см. рис 5.3.4)
Рис 5.3.3 сообщение по нажатию кнопки проверить в меню
регистрация пользователя.
Рис 5.3.4 вид меню “ регистрация пациента ” при выборе занятого
логина меню пациента
После того как пользователь ввел данные, он должен нажать на
кнопку отправить данные. Если все обязательные поля заполнены и логин свободен,
то пользователь увидит меню, представленное на рисунке 5.3.5
Рис 5.3.5 вид меню “регистрация успешно завершена ” меню
пациента
При нажатии на кнопку “вернуться в главное меню” пользователь
увидит меню как на рисунке 5.1.1. При нажатии на кнопку “зайти под своей
учетной записью” пользователь увидит меню, изображенное на рисунке 5.3.6.
Рис 5.3.6 вид меню окна “личный кабинет пациента ” меню
пациента
При нажатии на кнопку “записаться на прием” пациент увидит
меню, изображенное на рисунке 5.3.7. Здесь отображаются врачи с участка
пациента, и, выбрав, специальность, а потом, доступных врачей по этой
специальности, а также день на календаре в нижнем “combobox” отобразится список
свободных талончиков на текущую дату для выбранного врача. Выбрав талончик,
нужно нажать на кнопку “выбрать билет”. После этого талончик резервируется за
пациентом.Чтобы вернуться в меню, как на рисунке, 5.3.6 нужно нажать на крестик
в верхнем правом углу.
Рис 5.3.7 вид меню “выбор талончика” меню пациента
Если в меню пациента (рис.5.3.6) нажать на кнопку мои
посещения, то отобразится форма как на рисунке 5.3.8. Закрыв форму,
пользователь попадет в меню пациента(рис 5.3.6)
Рис 5.3.8 вид меню “мои посещения ” меню пациента
Если в меню пациента(рис. 5.3.6) нажать на кнопку мои анализы
отобразятся все анализы пациента(и готовые и только выписанные).Вид меню
изображен на рисунке 5.3.9. Закрыв эту форму, пользователь попадёт в меню
пациента(рис. 5.3.6)
Рис 5.3.9 вид меню “мои анализы ” меню пациента
Если из меню пациента(рис. 5.3.6) нажать на кнопку “мои
рецепты” отобразится меню как на рисунке 5.3.10. Закрыв эту форму, пользователь
увидит меню пациента(рис. 5.3.6)
Рис 5.3.10 вид меню “мои рецепты ” меню пациента
Если в меню входа пациента (рис. 5.3.1) ввести логин и пароль
ранее, зарегистрированный в системе, и нажать на кнопку вход, то при правильном
логине и пароле, пользователь попадет в меню пользователя (рис 5.3.6). В
противном случае на форме отобразится информация о неправильном вводе логина и
пароля.(см. рис 5.3.11)
Рис 5.3.11 вид меню “идентификация пациента” меню пациента
при неправильном вводе логина и пароля.
5.4 Меню врача
После того, как пользователь нажмёт на кнопку “войти как
врач” главного меню на экране появится меню как на рисунке 5.4.1.
Рис 5.4.1 вид меню “идентификация врача”
При неправильном вводе логина и пароля появиться следующее
сообщение(см. рис 5.4.2)
Рис 5.4.2 вид меню “идентификация врача” при неправильном
вводе логина и пароля
Если логин и пароль корректны, то пользователь увидит меню,
изображенное на рисунке 5.4.3.
Рис 5.4.3 вид меню врача
При нажатии на кнопку записать пациента на прием, на экране
отобразится меню, позволяющее записать пациента на прием(см. рис. 5.4.4) Это
меню аналогично соответствующему меню у пациента(рис 5.3.7), только у врача
появляется возможно записать к врачу с любого участка.
Рис 5.4.4 вид меню “запись на прием” меню врача.
Закрыв это окно, появится меню доктора(рис 5.4.3). При
нажатии на кнопку “сделать назначение” появится меню, как на рисунке 5.4.5. В
этой форме врач выбирает конкретное посещения для пациента.
Рис 5.4.5 вид меню “поиск посещений” меню врача
Нажав на кнопку заполнить появится новая форма(см. рис
5.4.6). Здесь врач может написать(исправить) результат осмотра. Нажав на кнопку
“сохранить”, результат вносится в систему.
Рис 5.4.6 вид меню “заполнение талончика” меню врача
При нажатии на кнопку “выписать направление на анализ”
пользователь увидит меню, изображенное на рисунке 5.4.7. Врач пишет название,
выбирает дату и наживает выписать, появляется соответствующее сообщение об
успешной выписке направления. При закрытии формы врач попадет в меню врача
(рис. 5.4.3).
6. Репликация данных
В данной работе используется публикация транзакций с
обновляемыми подписками базы данных. Это позволяет синхронизировать данные
между всеми филиалами. Схема репликации приведена на рисунке 6.1.
Рис 6.1 схема репликации
На схеме репликации изображен «Центральный офис», и несколько
филиалов. Репликацияосуществляется транзакциями с обновляемыми подписками.
Издателем является «Центральный офис» а подписчиками филиалы. Таким образом
происходит синхронизация всей базы данных.
Пример скрипта для настройки репликации транзакций с
обновляемыми подписками для центральной базы данных.
Для включения главной базы данных репликации транзакций с
обновляемыми подписками используем следующий скрипт:
- Включение базы данных репликации_replicationdboption
@dbname = N'kp_bd',
@optname = N'publish',
@value = N'true'
-Добавим агента чтения журнала в базу
данных.[kp_bd].sys.sp_addlogreader_agent
@job_login = null,
@job_password = null,
@publisher_security_mode = 1
-Добавим агента чтения очереди для указанного распространителя:[kp_bd].sys.sp_addqreader_agent
@job_login = null,
@job_password = null, @frompublisher = 1
- Добавление публикации транзакций[kp_bd]_addpublication
@publication = N'pub1',
@description = N'Публикациятранзакций с обновляемыми
подписками базы данных "kp_bd" от издателя
"REDWHITE-ПК\MSSQLSERVERSERJ1".',
@sync_method = N'concurrent',
@retention = 0,
@allow_push = N'true',
@allow_pull = N'true',
@allow_anonymous = N'true', @enabled_for_internet = N'false',
@snapshot_in_defaultfolder = N'true', @compress_snapshot =
N'false',
@ftp_port = 21,
@ftp_login = N'anonymous', @allow_subscription_copy =
N'false',
@add_to_active_directory = N'false', @repl_freq =
N'continuous',
@status = N'active',
@independent_agent = N'true',
@allow_sync_tran = N'true', @autogen_sync_procs = N'true',
@allow_queued_tran = N'true',
@allow_dts = N'false',
@conflict_policy = N'pub wins',
@centralized_conflicts = N'true', @conflict_retention = 14,
@queue_type = N'sql',
@replicate_ddl = 1, @allow_initialize_from_backup = N'false',
@enabled_for_p2p = N'false', @enabled_for_het_sub = N'false'
-Создатим агента моментальных снимков для
публикации._addpublication_snapshot
@publication = N'pub1',
@frequency_type = 1, @frequency_interval = 0,
@frequency_relative_interval = 0,
@frequency_recurrence_factor = 0,
@frequency_subday = 0, @frequency_subday_interval = 0,
@active_start_time_of_day = 0, @active_end_time_of_day =
235959,
@active_start_date = 0,
@active_end_date = 0,
@job_login = null,
@job_password = null,
@publisher_security_mode = 1
-Добавим в список доступа публикации имя
входа._grant_publication_access
@publication = N'pub1',
@login = N'sa'_grant_publication_access
@publication = N'pub1',
@login = N'NT AUTHORITY\система'_grant_publication_access
@publication = N'pub1',
@login = N'redwhite-ПК\redwhite'_grant_publication_access
@publication = N'pub1',
@login = N'NT
SERVICE\MSSQL$MSSQLSERVERSERJ1'_grant_publication_access
@publication = N'pub1',
@login = N'NT SERVICE\SQLAgent$MSSQLSERVERSERJ1'_grant_publication_access
@publication = N'pub1',
@login = N'distributor_admin'
- Добавление транзакционных статей для всех
таблиц[kp_bd]_addarticle
@publication = N'pub1',
@article = N'врач',
@source_owner= N'dbo',
@source_object = N'врач',
@type = N'logbased',
@description = N'', @creation_script = N'',
@pre_creation_cmd = N'drop',
@schema_option = 0x0000000008035CDF,
@identityrangemanagementoption = N'none', @destination_table
= N'врач',
@destination_owner = N'dbo',
@status = 24, @vertical_partition = N'false',
@ins_cmd = N'CALL [dbo].[sp_MSins_dboврач]', @del_cmd =
N'VCALL [dbo].[sp_MSdel_dboврач]',
@upd_cmd = N'VCALL
[dbo].[sp_MSupd_dboврач]'[kp_bd]_addarticle
@publication = N'pub1',
@article = N'день_недели', @source_owner = N'dbo',
@source_object = N'день_недели',
@type = N'logbased', @description = N'',
@creation_script = N'',
@pre_creation_cmd = N'drop', @schema_option =
0x0000000008035CDF,
@identityrangemanagementoption = N'auto',
@pub_identity_range = 10000,
@identity_range = 1000,
@threshold = 80,
@destination_table = N'день_недели',
@destination_owner = N'dbo',
@status = 24,
@vertical_partition = N'false',
@ins_cmd = N'CALL [dbo].[sp_MSins_dboдень_недели]', @del_cmd
= N'VCALL [dbo].[sp_MSdel_dboдень_недели]', @upd_cmd = N'VCALL
[dbo].[sp_MSupd_dboдень_недели]'[kp_bd]_addarticle
@publication = N'pub1',
@article = N'кабинет', @source_owner = N'dbo',
@source_object = N'кабинет',
@type = N'logbased', @description = N'',
@creation_script = N'',
@pre_creation_cmd = N'drop', @schema_option =
0x0000000008035CDF,
@identityrangemanagementoption = N'none',
@destination_table = N'кабинет',
@destination_owner = N'dbo', @status = 24,
@vertical_partition = N'false',
@ins_cmd = N'CALL [dbo].[sp_MSins_dboкабинет]',
@del_cmd = N'VCALL [dbo].[sp_MSdel_dboкабинет]', @upd_cmd =
N'VCALL [dbo].[sp_MSupd_dboкабинет]'[kp_bd]_addarticle
@publication = N'pub1',
@article = N'лекарство', @source_owner = N'dbo',
@source_object = N'лекарство',
@type = N'logbased', @description = N'',
@creation_script = N'',
@pre_creation_cmd = N'drop', @schema_option =
0x0000000008035CDF,
@identityrangemanagementoption = N'auto',
@pub_identity_range = 10000,
@identity_range = 1000,
@threshold = 80,
@destination_table = N'лекарство',
@destination_owner = N'dbo', @status = 24,
@vertical_partition = N'false',
@ins_cmd = N'CALL [dbo].[sp_MSins_dboлекарство]',
@del_cmd = N'VCALL [dbo].[sp_MSdel_dboлекарство]', @upd_cmd =
N'VCALL [dbo].[sp_MSupd_dboлекарство]'[kp_bd]_addarticle @publication =
N'pub1',
@article = N'личное_дело_врача', @source_owner = N'dbo',
@source_object = N'личное_дело_врача',
@type = N'logbased',
@description = N'',
@creation_script = N'',
@pre_creation_cmd = N'drop',
@schema_option = 0x0000000008035CDF,
@identityrangemanagementoption= N'auto',
@pub_identity_range = 10000,
@identity_range = 1000, @threshold = 80,
@destination_table = N'личное_дело_врача',
@destination_owner = N'dbo',
@status = 24,
@vertical_partition = N'false',
@ins_cmd = N'CALL [dbo].[sp_MSins_dboличное_дело_врача]',
@del_cmd = N'VCALL [dbo].[sp_MSdel_dboличное_дело_врача]',
@upd_cmd = N'VCALL
[dbo].[sp_MSupd_dboличное_дело_врача]'[kp_bd]_addarticle
@publication = N'pub1',
@article = N'модератор', @source_owner = N'dbo',
@source_object = N'модератор',
@type = N'logbased', @description = N'',
@creation_script = N'',
@pre_creation_cmd = N'drop',
@schema_option = 0x0000000008035CDF,
@identityrangemanagementoption =N'none',
@destination_table = N'модератор',
@destination_owner = N'dbo', @status = 24,
@vertical_partition = N'false',
@ins_cmd = N'CALL [dbo].[sp_MSins_dboмодератор]',
@del_cmd = N'VCALL [dbo].[sp_MSdel_dboмодератор]', @upd_cmd =
N'VCALL [dbo].[sp_MSupd_dboмодератор]'[kp_bd]_addarticle
@publication = N'pub1',
@article = N'направление_на_анализ',
@source_owner = N'dbo', @source_object =
N'направление_на_анализ',
@type = N'logbased',
@description = N'', @creation_script = N'',
@pre_creation_cmd = N'drop',
@schema_option = 0x0000000008035CDF,
@identityrangemanagementoption = N'auto', @pub_identity_range
= 10000,
@identity_range = 1000,
@threshold = 80,
@destination_table = N'направление_на_анализ',
@destination_owner = N'dbo', @status = 24,
@vertical_partition = N'false',
@ins_cmd = N'CALL [dbo].[sp_MSins_dboнаправление_на_анализ]',
@del_cmd = N'VCALL
[dbo].[sp_MSdel_dboнаправление_на_анализ]', @upd_cmd = N'VCALL
[dbo].[sp_MSupd_dboнаправление_на_анализ]'[kp_bd]_addarticle
@publication = N'pub1',
@article = N'пациент',
@source_owner= N'dbo',
@source_object = N'пациент',
@type = N'logbased', @description = N'',
@creation_script = N'',
@pre_creation_cmd = N'drop',
@schema_option = 0x0000000008035CDF,
@identityrangemanagementoption = N'none',
@destination_table = N'пациент',
@destination_owner = N'dbo',
@status = 24, @vertical_partition = N'false',
@ins_cmd = N'CALL [dbo].[sp_MSins_dboпациент]',
@del_cmd = N'VCALL [dbo].[sp_MSdel_dboпациент]',
@upd_cmd = N'VCALL
[dbo].[sp_MSupd_dboпациент]'[kp_bd]_addarticle
@publication = N'pub1',
@article = N'посещение',
@source_owner = N'dbo',
@source_object = N'посещение',
@type = N'logbased', @description = N'',
@creation_script = N'',
@pre_creation_cmd = N'drop',
@schema_option = 0x0000000008035CDF,
@identityrangemanagementoption = N'auto',
@pub_identity_range = 10000,
@identity_range = 1000,
@threshold = 80,
@destination_table = N'посещение',
@destination_owner = N'dbo',
@status = 24,
@vertical_partition = N'false',
@ins_cmd = N'CALL [dbo].[sp_MSins_dboпосещение]',
@del_cmd = N'VCALL [dbo].[sp_MSdel_dboпосещение]', @upd_cmd =
N'VCALL [dbo].[sp_MSupd_dboпосещение]'[kp_bd]_addarticle
@publication = N'pub1',
@article = N'расписание', @source_owner = N'dbo',
@source_object = N'расписание',
@type = N'logbased', @description = N'',
@creation_script = N'',
@pre_creation_cmd = N'drop', @schema_option =
0x0000000008035CDF,
@identityrangemanagementoption= N'auto', @pub_identity_range
= 10000,
@identity_range = 1000,
@threshold = 80,
@destination_table = N'расписание',
@destination_owner = N'dbo',
@status = 24,
@vertical_partition = N'false',
@ins_cmd = N'CALL [dbo].[sp_MSins_dboрасписание]',
@del_cmd = N'VCALL [dbo].[sp_MSdel_dboрасписание]',
@upd_cmd = N'VCALL
[dbo].[sp_MSupd_dboрасписание]'[kp_bd]_addarticle
@publication = N'pub1',
@article = N'рецепт', @source_owner = N'dbo',
@source_object = N'рецепт',
@type = N'logbased', @description = N'',
@creation_script = N'',
@pre_creation_cmd = N'drop', @schema_option =
0x0000000008035CDF,
@identityrangemanagementoption = N'auto',
@pub_identity_range = 10000,
@identity_range = 1000,
@threshold = 80,
@destination_table = N'рецепт',
@destination_owner = N'dbo',
@status = 24,
@vertical_partition = N'false',
@ins_cmd = N'CALL [dbo].[sp_MSins_dboрецепт]',
@del_cmd = N'VCALL [dbo].[sp_MSdel_dboрецепт]', @upd_cmd = N'VCALL
[dbo].[sp_MSupd_dboрецепт]'[kp_bd]_addarticle
@publication = N'pub1',
@article = N'смена',
@source_owner= N'dbo',
@source_object = N'смена',
@type = N'logbased',
@description = N'',
@creation_script = N'',
@pre_creation_cmd = N'drop',
@schema_option = 0x0000000008035CDF,
@identityrangemanagementoption = N'auto', @pub_identity_range
= 10000,
@identity_range = 1000,
@threshold = 80, @destination_table = N'смена',
@destination_owner = N'dbo',
@status = 24, @vertical_partition = N'false',
@ins_cmd = N'CALL [dbo].[sp_MSins_dboсмена]', @del_cmd =
N'VCALL [dbo].[sp_MSdel_dboсмена]',
@upd_cmd = N'VCALL
[dbo].[sp_MSupd_dboсмена]'[kp_bd]_addarticle
@publication = N'pub1',
@article = N'специальность', @source_owner = N'dbo',
@source_object = N'специальность',
@type = N'logbased', @description = N'',
@creation_script = N'',
@pre_creation_cmd = N'drop',
@schema_option = 0x0000000008035CDF,
@identityrangemanagementoption= N'auto',
@pub_identity_range = 10000,
@identity_range = 1000,
@threshold =80,
@destination_table = N'специальность',
@destination_owner = N'dbo', @status = 24,
@vertical_partition = N'false',
@ins_cmd = N'CALL [dbo].[sp_MSins_dboспециальность]',
@del_cmd = N'VCALL [dbo].[sp_MSdel_dboспециальность]',
@upd_cmd = N'VCALL [dbo].[sp_MSupd_dboспециальность]'[kp_bd]_addarticle
@publication = N'pub1',
@article = N'тип_посещения', @source_owner = N'dbo',
@source_object = N'тип_посещения',
@type = N'logbased',
@description = N'',
@creation_script = N'',
@pre_creation_cmd = N'drop',
@schema_option = 0x0000000008035CDF,
@identityrangemanagementoption= N'auto',
@pub_identity_range = 10000,
@identity_range = 1000,
@threshold = 80,
@destination_table = N'тип_посещения',
@destination_owner = N'dbo',
@status = 24, @vertical_partition = N'false',
@ins_cmd = N'CALL [dbo].[sp_MSins_dboтип_посещения]',
@del_cmd = N'VCALL [dbo].[sp_MSdel_dboтип_посещения]',
@upd_cmd = N'VCALL
[dbo].[sp_MSupd_dboтип_посещения]'[kp_bd]_addarticle
@publication = N'pub1',
@article = N'улица',
@source_owner= N'dbo',
@source_object = N'улица',
@type = N'logbased',
@description = N'', @creation_script = N'',
@pre_creation_cmd = N'drop',
@schema_option= 0x0000000008035CDF,
@identityrangemanagementoption = N'auto', @pub_identity_range
= 10000,
@identity_range = 1000,
@threshold = 80, @destination_table = N'улица',
@destination_owner = N'dbo',
@status = 24, @vertical_partition = N'false',
@ins_cmd = N'CALL [dbo].[sp_MSins_dboулица]', @del_cmd =
N'VCALL [dbo].[sp_MSdel_dboулица]',
@upd_cmd = N'VCALL [dbo].[sp_MSupd_dboулица]'[kp_bd]_addarticle
@publication = N'pub1',
@article = N'участок',
@source_owner = N'dbo',
@source_object = N'участок',
@type = N'logbased',
@description = N'',
@creation_script = N'',
@pre_creation_cmd = N'drop',
@schema_option = 0x0000000008035CDF,
@identityrangemanagementoption = N'auto',
@pub_identity_range = 10000,
@identity_range = 1000,
@threshold = 80,
@destination_table = N'участок',
@destination_owner = N'dbo', @status = 24,
@vertical_partition = N'false',
@ins_cmd = N'CALL [dbo].[sp_MSins_dboучасток]',
@del_cmd = N'VCALL [dbo].[sp_MSdel_dboучасток]', @upd_cmd =
N'VCALL [dbo].[sp_MSupd_dboучасток]'
- Добавление подписок на публикацию
транзакций[kp_bd]_addsubscription
@publication = N'pub1',
@subscriber = N'REDWHITE-ПК\MSSQLSERVERSERJ2',
@destination_db = N'kp_bd', @subscription_type = N'Pull',
@sync_type = N'automatic',
@article = N'all',
@update_mode = N'failover',
@subscriber_type = 0
- Добавление транзакционной подписки по запросу
/****** Начало: сценарий для запуска на подписчике ******/[kp_bd]exec
sp_addpullsubscription
@publisher = N'REDWHITE-ПК\MSSQLSERVERSERJ1',
@publication = N'pub1',
@publisher_db = N'kp_bd',
@independent_agent = N'True',
@subscription_type = N'pull',
@description = N'',
@update_mode = N'failover',
@immediate_sync = 1
/*Задает сведения о конфигурации и безопасности, применяемые
триггерами --синхронизации немедленно обновляемых подписок при подключении к
издателю. Эта хранимая процедура выполняется на подписчике в базе данных
подписки.*/_link_publication
@publisher = N'REDWHITE-ПК\MSSQLSERVERSERJ1',
@publication = N'pub1',
@publisher_db = N'kp_bd',
@security_mode = 0,
@login = N'',
@password = null
-Добавим новое задание агента, подписки на публикацию
транзакций_addpullsubscription_agent
@publisher = N'REDWHITE-ПК\MSSQLSERVERSERJ1',
@publisher_db = N'kp_bd',
@publication = N'pub1',
@distributor = N'REDWHITE-ПК\MSSQLSERVERSERJ1',
@distributor_security_mode = 1,
@distributor_login = N'',
@distributor_password = N'',
@enabled_for_syncmgr = N'False',
@frequency_type = 64, @frequency_interval = 0,
@frequency_relative_interval = 0,
@frequency_recurrence_factor = 0,
@frequency_subday = 0,
@frequency_subday_interval = 0,
@active_start_time_of_day = 0,
@active_end_time_of_day = 235959,
@active_start_date = 0,
@active_end_date = 0,
@alt_snapshot_folder = N'',
@working_directory = N'',
@use_ftp = N'False', @job_login = null,
@job_password = null,
@publication_type = 0
/****** Конец: сценарий для запуска на подписчике ******/
/****** Начало: сценарий для запуска на издателе ******/
/*use [kp_bd]
- Параметр @sync_type указан в сценарии как
"automatic". При необходимости измените параметр._addsubscription
@publication = N'pub1',
@subscriber = N'REDWHITE-ПК\MSSQLSERVERSERJ2',
@destination_db = N'kp_bd',
@sync_type = N'Automatic',
@subscription_type = N'pull',
@update_mode = N'failover'
*/
/****** Конец: сценарий для запуска на издателе ******/
7. Хранилище и отчеты
.1 Схема хранилища
Схема хранилища данных реализована потипаmultidimensional
диаграммы в виде куба. Схема выполнена в среде Powerdesigner инструментами для
создания диаграмм хранилищ данных.
Гиперкуб направление_на_анализ служит хранилищем данных.
Гиперкубимеет измерения участок_врач_расписание_посещение,
специальность_врач_расписание_посещение, день_недели_расписание_посещение,
тип_посещения_посещение, кабинет_расписание_посещение,
участок_улица_расписание_посещение.
Гиперкуб рецепт имеет те же измерения, что и
направление_на_анализ и добавочное измерение лекарства.
Гиперкуб личное дело_врача имеет измерения специальность_врач
и участок_врач.
Рис. 7.1 Хранилище данных
7.2 Отчеты
Отчеты выполнены в виде хранимых процедур, возвращающих
некоторую статистику. В данной работе выполнены два отчета. Оба из них
относятся к врачам. Первый отчет показывает количество отработанных часов за
неделю и представлен на рисунке 7.2.1. Второй отчет показывает комплексную
статистику работы врача. Его внешний вид изображен на рисунке 7.2.2. Также
имеется возможность сохранить отчеты в формате “*.xlsx”. Внешний вид таких
отчётов приведен на рисунках 7.2.3 и 7.2.4.
Рис 7.2.1 внешний вид отчёта об отработанных часах врача
Рис 7.2.2 внешний вид комплексного отчёта о деятельности
врачей
Рис 7.2.3 внешний вид отчёта об отработанных часах врачав
excel
Рис 7.2.4 внешний вид комплексного отчёта о деятельности
врачейв excel
Список литературы
1.
http://msdn.microsoft.com
.
А.В. Бржезовский, М.Н. Суслов. БАЗЫ ДАННЫХ. Методические указания к выполнению
лабораторных работ
.
А.В. Бржезовский. РАСПРЕДЕЛЕННЫЕ БАЗЫ ДАННЫХ. Методические указания к
выполнению лабораторных работ