-
Разработка логической модели
Логическая модель была создана CASE-средством проектирования-Erwin. Для разработки логической модели была использована программа AllFusion ERwin Data Modeler (ERwin).
ERwin - CASE-средство проектирования баз данных от фирмы Computer Associates. ERwin сочетает графический интерфейс Windows, инструменты для построения ER-диаграмм, редакторы для создания логического и физического описания модели данных и поддержку реляционных СУБД.
Он поддерживает различные серверы баз данных и настольные СУБД, а также может обращаться к базе данных через интерфейс ODBC. Так, в текущей версии ERwin встроена поддержка 23 СУБД, среди которых: Oracle; Microsoft SQL Server и др.
Процесс моделирования в ERwin базируется на методологии проектирования реляционных баз данных IDEF1X. Данная методология была разработана для ВВС США и теперь широко используется в правительственных учреждениях и частных компаниях, как в самих США, так и далеко за их пределами.
ERwin имеет два уровня представления модели - логический и физический. В данном проекте разработана лишь логическая модель. Логический уровень - это абстрактный взгляд на данные, на нем данные представляются так, как выглядят в реальном мире, и могут называться так, как они называются в реальном мире.
Объекты модели, представляемые на логическом уровне, называются сущностями и атрибутами. Логическая модель данных может быть построена на основе другой логической модели, например на основе, Microsoft SQL Server Management Studio.
Рис.4. Логическая схема (ERwin)
-
Серверная часть
Серверная часть данного проекта состоит из таблиц, триггеров, хранимых процедур и генераторов.
Таблица «Прием пациента» содержит информацию обо всех приемах. Она является дочерней таблицей.
Имя |
Тип |
Описание |
NomerZapisi |
int |
Ключевое поле таблицы |
KodPacienta |
int |
Ссылка на таблицу «Пациент». Внешний ключ. |
KodPreparata |
int |
Ссылка на таблицу «Пациент». Внешний ключ. |
KodSotrudnika |
int |
Ссылка на таблицу «Пациент». Внешний ключ. |
DataPriema |
date |
Дата |
Таблица «Пациент» содержит информацию обо всех зарегистрированных в поликлинике людей. Она является дочерней таблицей.
Имя |
Тип |
Описание |
KodPacienta |
int |
Ключевое поле таблицы |
FIO |
ntext |
ФИО пациента |
DataRozdeniya |
date |
Дата рождения |
Propiska |
ntext |
Прописка |
KodYchastka |
int |
Дата |
KodGruppa |
int |
Ссылка на таблицу «Участки». Внешний ключ. |
KodFamily |
int |
Ссылка на таблицу «Семья». Внешний ключ. |
MectoRaboti |
ntext |
Место работы |
NomerStrahovogoPolisa |
int |
Номер страхового полиса |
KodP |
int |
Ссылка на таблицу «Группа». Внешний ключ. |
Year1 |
int |
Год |
Таблица «Препарат» содержит информацию о препаратах. Она является дочерней таблицей.
Имя |
Тип |
Описание |
KodPreparata |
int |
Ключевое поле таблицы |
Nazvanie |
ntext |
Название препарата |
Dozirovka |
int |
Дозировка |
KodFormi |
int |
Ссылка на таблицу «Форма». Внешний ключ. |
Protivopokazaniya |
ntext |
Противопоказания данного препарата |
VremyaPrimeneniya |
ntext |
Время применения |
SrokGodnosti |
date |
Срок годности |
Таблица «Сотрудники» содержит информацию о сотрудниках. Она является родительской таблицей.
Имя |
Тип |
Описание |
KodSotrudnika |
Int |
Ключевое поле таблицы |
FIO |
Ntext |
ФИО сотрудника |
KodDolzhnosti |
Int |
Ссылка на таблицу «Должности». Внешний ключ. |
Таблица «Форма выпуска» содержит информацию о формах выпуска препаратов. Она является родительской таблицей.
Имя |
Тип |
Описание |
KodFormi |
Int |
Ключевое поле таблицы |
FormaVipyska |
Ntext |
Форма выпуска препарата |
Таблица «Состав семьи» содержит список статусов семейного положения. Она является родительской таблицей.
Имя |
Тип |
Описание |
KodFamily |
Int |
Ключевое поле таблицы |
SostavFamily |
Ntext |
Семейный статус |
Таблица «Группа» содержит список групп инвалидности. Она является родительской таблицей.
Имя |
Тип |
Описание |
KodGruppa |
Int |
Ключевое поле таблицы |
GruppaInvalidnosti |
int |
Группа инвалидности |
Таблица «Участки» заключает в себе список участков. Она является родительской таблицей.
Имя |
Тип |
Описание |
KodYchastka |
Int |
Ключевое поле таблицы |
Ychastki |
int |
Участок |
Таблица «Тип пациента» заключает в себе список участков. Она является родительской таблицей.
Имя |
Тип |
Описание |
KodP |
Int |
Ключевое поле таблицы |
TipPacienta |
ntext |
Категория пациента |
Таблица «Тип пациента» заключает в себе список участков. Она является родительской таблицей.
Имя |
Тип |
Описание |
KodDolznosti |
Int |
Ключевое поле таблицы |
Dolznost |
ntext |
Должность |
Триггер - это хранимая процедура особого типа, которую пользователь не вызывает непосредственно, а исполнение которой обусловлено действием по модификации данных: добавлением INSERT, удалением DELETE строки в заданной таблице, или изменением UPDATE данных в определенном столбце заданной таблицы реляционной базы данных. Триггеры применяются для обеспечения целостности данных и реализации сложной бизнес-логики.
Триггер запускается сервером автоматически при попытке изменения данных в таблице, с которой он связан. Все производимые им модификации данных рассматриваются как выполняемые в транзакции, в которой выполнено действие, вызвавшее срабатывание триггера. Соответственно, в случае обнаружения ошибки или нарушения целостности данных может произойти откат этой транзакции.
Момент запуска триггера определяется с помощью ключевых слов BEFORE (триггер запускается до выполнения связанного с ним события; например, до добавления записи) или AFTER (после события). В случае, если триггер вызывается до события, он может внести изменения в модифицируемую событием запись (конечно, при условии, что событие — не удаление записи). Некоторые СУБД накладывают ограничения на операторы, которые могут быть использованы в триггере (например, может быть запрещено вносить изменения в таблицу, на которой находится триггер, и т. п.)
Кроме того, триггеры могут быть привязаны не к таблице, а к представлению (VIEW). В этом случае с их помощью реализуется механизм «обновляемого представления». В этом случае ключевые слова BEFORE и AFTER влияют лишь на последовательность вызова триггеров, так как собственно событие (удаление, вставка или обновление) не происходит.
В некоторых серверах триггеры могут вызываться не для каждой модифицируемой записи, а один раз на изменение таблицы. Такие триггеры называются табличными.
Пример кода триггера:
USE [Курсач ИТ]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[DelPacient]
ON [dbo].[Пациент]
AFTER DELETE
AS
BEGIN
SET NOCOUNT ON;
Declare @id bigint
Set @id = (Select KodPacienta From deleted)
Delete [Прием пациента]
Where KodPacienta = @id
END
Данный триггер удаляет данные о приеме из таблицы «Прием пациента», если в таблице «Пациент» удалить данные о пациенте.
Хранимая процедура — объект базы данных, представляющий собой набор SQL-инструкций, который компилируется один раз и хранится на сервере. Хранимые процедуры очень похожи на обыкновенные процедуры языков высокого уровня, у них могут быть входные и выходные параметры и локальные переменные, в них могут производиться числовые вычисления и операции над символьными данными, результаты которых могут присваиваться переменным и параметрам. В хранимых процедурах могут выполняться стандартные операции с базами данных (как DDL, так и DML). Кроме того, в хранимых процедурах возможны циклы и ветвления, то есть в них могут использоваться инструкции управления процессом исполнения.
Хранимые процедуры похожи на определяемые пользователем функции (UDF). Основное различие заключается в том, что пользовательские функции можно использовать, как и любое другое выражение в SQL запросе, в то время как хранимые процедуры должны быть вызваны с помощью функции CALL.
Хранимые процедуры могут возвращать множества результатов, то есть результаты запроса SELECT. Такие множества результатов могут обрабатываться, используя курсоры, другими сохраненными процедурами, возвращая указатель результирующего множества, либо же приложениями. Хранимые процедуры могут также содержать объявленные переменные для обработки данных и курсоров, которые позволяют организовать цикл по нескольким строкам в таблице. Стандарт SQL предоставляет для работы выражения IF, LOOP, REPEAT, CASE и многие другие. Хранимые процедуры могут принимать переменные, возвращать результаты или изменять переменные и возвращать их, в зависимости от того, где переменная объявлена.
USE [Курсач ИТ]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[God]
AS
BEGIN
SET NOCOUNT ON;
Delete from dbo.Пациент where Year1>125
END
Генератор - это специальный объект базы данных, который генерирует уникальные последовательные числа. Эти числа могут быть использованы в качестве идентификаторов.
Сами по себе генераторы не обеспечивают сохранение последовательности номеров в случае удаления записей - генератор всего лишь выдает числа по очереди увеличивая их на некоторую величину и обеспечивая уникальность выданных значений. То есть, генератор выглядит как переменная типа integer, которая находится в памяти, и над которой можно выполнять операции Inc и Dec. Если требуется обеспечить непрерывные последовательности идентификаторов записей даже в случае их удаления или модификации, то необходимо обратиться к статье Auditable series of numbers (непрерывные последовательности чисел).