Недостатки:
. Несоответствие реляционной модели данных:
· Повторяющиеся строки
· Неопределённые значения
· Явное указание порядка колонок слева направо
· Колонки без имени и дублирующиеся имена колонок
· Отсутствие поддержки свойства «=»
· Использование указателей
· Высокая избыточность
2. Сложность. Хотя SQL и задумывался как средство работы конечного пользователя, в конце концов он стал настолько сложным, что превратился в инструмент программиста.
3. Отступления от стандартов. Несмотря на наличие международного стандарта ANSI SQL-92, многие компании, занимающиеся разработкой СУБД, вносят изменения в язык SQL, применяемый в разрабатываемой СУБД, тем самым отступая от стандарта. Таким образом, появляются специфичные для каждой конкретной СУБД диалекты языка SQL.
. Сложность работы с иерархическими структурами. Ранее диалекты SQL большинства СУБД не предлагали способа манипуляции древовидными структурами. Некоторые поставщики СУБД предлагали свои решения. В настоящее время в ANSI стандартизована рекурсивная конструкция WITH из диалекта SQL DB2. В MS SQL Server рекурсивные запросы появились лишь в версии MS SQL Server 2005.
В данном курсовом проекте в качестве реализации БД была выбрана среда
Microsoft SQL Server. Она бесплатная, имеет независимость от конкретной СУБД,
поэтому тексты SQL запросов, написанные в данной среде могут быть легко
перенесены на другие СУБД - это очень удобно и эффективно. Также эта среда
имеет стандарты - запросы написанные совершенно другим разработчиком можно
легко понять, производить их изменение и доработку.
4. Физическая реализация
.1 Построение таблиц и схемы данных средствами СУБД
Для создания таблицы в режиме конструктор необходимо раскрыть контекстное
меню "Базы данных", выбрать свою базу данных, в нашем случае -
Больница (рис.2). Затем также раскрыть контекстное меню, выбрать пункт
"Таблицы", щелкнуть правой кнопкой мыши по нему, после чего появится
выпадающий список, где нужно выбрать пункт "Создать таблицу".
Рисунок 2
Далее появится следующий интерфейс (рис. 3). Он разделен на три части. Под пунктом "Имя столбца" вы указываете непосредственно имена своих столбцов. "Тип данных" предназначен для указания типов ваших столбцов. Третий пункт разрешает использование или запрещает использование нулевых значений.
Рисунок 3
В данной базе данных используется три основные таблицы и одна промежуточная.
Основные:
· Пациенты
· Лекарства
· Журнал
Промежуточная:
· Пациент_лекарства
Таблица 1 "Пациент"
Имя поля
Тип данных
Признак ключевого поля
История_болезни
INT
Primary key
ФИО
NCHAR(30)
-----
Врач
NCHAR(30)
-----
Номер_палаты
INT
-----
Лечение
NCHAR(30)
-----
Страховой_полис
INT
-----
Диагноз
NCHAR(30)
-----
Измение_диагноза
bit
-----
Таблица 2 "Журнал"
Имя поляТип данныхПризнак
ключевого поля
Номер_записи
INT
-----
Дата_поступления
DATE
-----
Дата_выписки
DATE
-----
История_болезни
INT
Foreign key
Таблица 3 "Лекарства"
Имя поля
Тип данных
Признак ключевого поля
Название_лекарства
NCHAR(30)
Primary key
Стоимость_лекарства
INT
-----
Таблица 4 "Пациент_лекарства"
Имя поляТип данныхПризнак
ключевого поля
История_болезни
INT
Foreign key
Название_лекарства
NCHAR(30)
Foreign key
Для установления связей между таблицами нужно открыть созданную диаграмму
(рис. 4). Нажать левой кнопкой мыши на ключ у главной таблицы, в нашем случае
"Пациент", и, держа кнопку, перетащить курсор мыши на дочернюю
таблицу "Журнал".
После этого откроется следующий интерфейс (рис. 5). Здесь выбираются
таблицы для первичных и внешних ключей, а также необходимые для этого поля.
После автоматически создается связь.
Рисунок 5
.2 Создание запросов на языке SQL
- это универсальный язык для создания, модификации и управления
информацией, которая входит в состав реляционных баз данных. Первоначально SQL
был основным способом работы с данными. С помощью него пользователь мог
выполнять следующие действия:
· создание новой таблицы в базе данных (БД);
· добавление новых записей в существующие таблицы;
· редактирование записей;
· полное удаление записей;
· выбор записи из разных таблиц, в соответствии с заданными
условиями;
· изменение вида и структур одной или нескольких таблиц.
· и д.р.
В разрабатываемой системе используются следующие запросы:
Упорядочение по полям: ФИО больных, диагноз, распределение по палатам.
Запрос:
Пациент.*ПациентBY Пациент.ФИОПациент.*ПациентBY
Пациент.ДиагнозПациент.*ПациентBY Пациент.Номер_палаты
Результат:
Рис. 6
Поиск: сведения о больных по первым буквам фамилии; по № палаты. Данные
запросы были выполнены с помощью хранимых процедур.
Запрос на поиск №1:
USE [Больница]
/****** Object: StoredProcedure [dbo].[Поиск по фамилии] Script Date: 25.11.2015 19:54:27
******/ANSI_NULLS ONQUOTED_IDENTIFIER ONPROCEDURE [dbo].[Поиск по фамилии]
@Введите_фамилию nvarchar(30)*ПациентФИО like '%' + @Введите_фамилию
+ '%'
Результат:
Рис. 7
Запрос на поиск №2:
[Больница]
GO
/****** Object: StoredProcedure [dbo].[Поиск_по_палате] Script Date: 25.11.2015
19:58:46 ******/ANSI_NULLS ONQUOTED_IDENTIFIER ONPROCEDURE [dbo].[Поиск_по_палате]
@Введите_палату int*ПациентПациент.Номер_палаты=@Введите_палату
END
Результат:
Рис. 8
Выборка: по дню поступления больных, по дню выписки, по диагнозу.
Запрос:
*ПациентДиагноз = 'Грипп'Пациент.*Журнал, ПациентДата_поступления = '03.05.2014'
AND Журнал.История_болезни = Пациент.История_болезниПациент.*Журнал,
ПациентДата_выписки = '20.03.2015' AND Журнал.История_болезни =
Пациент.История_болезни
Результат:
Рис. 9
Вычисления: количество больных, поступивших в январе, феврале и т.д.;
количество больных, выписавшихся в январе, феврале и т.д. Данные запросы были
выполнены с помощью хранимых процедур.
Запрос на вычисление №1:
[Больница]
GO
/****** Object: StoredProcedure [dbo].[Вычисление_1] Script Date: 25.11.2015 20:06:49
******/ANSI_NULLS ONQUOTED_IDENTIFIER ONPROCEDURE [dbo].[Вычисление_1]
@Количество_больных int=0 OUTPUT
SELECT @Количество_больных=count(*)ЖурналMONTH(Журнал.Дата_поступления) =
'01' OR MONTH(Журнал.Дата_поступления) = '02';
Результат:
Рис. 10
Запрос на вычисление №2:
[Больница]
GO
/****** Object: StoredProcedure [dbo].[Вычисление_2] Script Date: 25.11.2015 20:09:38
******/ANSI_NULLS ONQUOTED_IDENTIFIER ONPROCEDURE [dbo].[Вычисление_2]
@Количество_больных int=0 OUTPUT@Количество_больных=count(*)ЖурналMONTH(Журнал.Дата_выписки) = '01' OR MONTH(Журнал.Дата_выписки) = '02';
END
Результат:
Рис. 11
Коррекция: удаление данных о больных, выписавшихся в прошлом году;
количество больных с изменением первоначального диагноза на конечный.
Запрос на коррекцию №1:
USE
[Больница]
GO
/****** Object: StoredProcedure [dbo].[Удаление] Script Date: 25.11.2015 20:29:01
******/ANSI_NULLS ONQUOTED_IDENTIFIER ONPROCEDURE [dbo].[Удаление]
@количество int OUTPUT@количество=Журнал.История_болезни
FROM ЖурналYEAR(Журнал.Дата_поступления) < '2015'
DELETEПациентПациент.История_болезни=@количество
END Рис.12
Запрос на коррекцию №2:
USE
[Больница]
GO
/****** Object: StoredProcedure [dbo].[Количество_больных_с_изм] Script Date: 25.11.2015 20:11:36
******/ANSI_NULLS ONQUOTED_IDENTIFIER ONPROCEDURE [dbo].[Количество_больных_с_изм]
@Количество_больных int=0 OUTPUT@Количество_больных=count(*)Пациент Пациент.Измение_диагноза = 'TRUE'
Результат:
Рис. 13
Также в данном курсовом проекте был разработан триггер. При удалении
записей он проверяет условие "Изменения диагноза" и если оно истинно,
то появляется сообщение об ошибке.
Триггер:
USE [Больница]
/****** Object: Trigger [dbo].[primer2] Script Date:
25.11.2015 20:15:14 ******/ANSI_NULLS ONQUOTED_IDENTIFIER ONTRIGGER
[dbo].[primer2][dbo].[Пациент]DELETENOCOUNT ON;(select Измение_диагноза from deleted) = '1'
print'Нельзя удалять запись!'
Запрос:ПациентИзмение_диагноза = '1'
Результат:
Рис. 14
Было предусмотрено ограничение целостности: каждый больной лечится в
одной из существующих палат (рис. 15).
Рисунок 15
Если пользователь вводит номер палаты, который больше 10, то появляется
следующее сообщение об ошибке (рис. 16).
Рисунок 16
4.3 Создание форм и отчетов
В общей структуре информационной системы формы служат для упрощения
работы пользователя с базами данных. Формы делают работу более простой и
наглядной. В данном курсовом проекте для создания форм и отчетов была
использована программа "Построитель отчетов 3.0". Для того чтобы
приступить к разработке отчета необходимо выбрать наш SQL-сервер и базу данных
(рис. 17).
Рисунок 17
После чего нажать "Ок", а затем кнопку далее. В
"Проектировании запроса" вам предложат выбрать интересующие вас таблицы,
которые будут участвовать в отчете и нажать кнопку далее (рис. 18).
Рисунок 19
Как только вы завершили проектирование запроса вам предложат выбрать
стиль отчета, в нашем случае был выбран стиль "Универсальный"
Конечный вариант отчета представлен в Приложении В.
Список литературы
1) ГОСТ 2.106-96. Текстовые документы. М.: Изд-во
стандартов, 1996.-40с.- (Единая система конструкторской документации).
2) ГОСТ 2.105-95. Общие требования к текстовым
документам. М.:Изд-во стандартов, 1995.-20с.- (Единая система конструкторской
документации).
) Базы данных: теория, разработка и использование :
учебное пособие / Е.Г. Бершадская, Н.А. Филиппова. - Пенза : Изд-во Пенз. гос.
технол. акад., 2012. - 107 с.
Приложение А
управление запрос информационный
Приложение Б
Приложение В
