
- •Оглавление
- •Постановка задачи. Описание проекта
- •Документы предметной области
- •Описание серверной части
- •Диаграмма базы данных, полученная средствами ibExpert:
- •Полный документированный скрипт на создание базы данных Создание таблиц
- •Создание индексов
- •Триггеры
- •Генераторы
- •Хранимые процедуры
- •Описание клиентской части
- •Руководство пользователя.
- •Руководство разработчика.
- •Заключение
- •Список используемого программного обеспечения
- •Список используемой литературы
- •Полный код программы
Генераторы
Генератор - это именованный счетчик, возвращающий уникальные целочисленные значения, используется для автоматического формирования первичных ключей таблицы. Генератор может быть вставлен в столбец с помощью функции GEN_ID().
Формирование первичного ключа таблицы VRACHI.
CREATE GENERATOR GEN_VRACHI_ID;
SET GENERATOR GEN_VRACHI_ID TO 1;
Формирование первичного ключа таблицы PACIENTI.
CREATE GENERATOR GEN_PACIENTI_ID;
SET GENERATOR GEN_PACIENTI_ID TO 1;
Формирование первичного ключа таблицы OBRASHENIYA.
CREATE GENERATOR GEN_OBRASHENIYA_ID;
SET GENERATOR GEN_OBRASHENIYA_ID TO 1;
Хранимые процедуры
Создание хранимой процедуры на удаление.
Для таблицы VRACHI.
Команда GRANT позволяют системным администраторам создавать пользователей MySQL, а также предоставлять права пользователям или лишать их прав. EXECUTE - разрешает пользователю запускать хранимые процедуры. DELETE - разрешает использование DELETE. SELECT- разрешает использование SELECT.
create or alter procedure DELETE_VR (
ID_VRACHA_A integer)
as
begin
delete from VRACHI where ID_VRACHA=:ID_VRACHA_A;
suspend;
end^
SET TERM ; ^
GRANT SELECT,DELETE ON VRACHI TO PROCEDURE DELETE_VR;
GRANT EXECUTE ON PROCEDURE DELETE_VR TO SYSDBA;
Для таблицы PACIENTI.
create or alter procedure DELETE_PA (
ID_PACIENTA_A integer)
as
begin
delete from PACIENTI where ID_PACIENTA=:ID_PACIENTA_A;
suspend;
end^
SET TERM ; ^
GRANT SELECT,DELETE ON PACIENTI TO PROCEDURE DELETE_PA;
GRANT EXECUTE ON PROCEDURE DELETE_PA TO SYSDBA;
Для таблицы SKIDKI.
create or alter procedure DELETE_SK (
KATEGORIYA_SKIDKI_A integer)
as
begin
delete from SKIDKI where KATEGORIYA_SKIDKI=:KATEGORIYA_SKIDKI_A;
suspend;
end^
SET TERM ; ^
GRANT SELECT,DELETE ON SKIDKI TO PROCEDURE DELETE_SK;
GRANT EXECUTE ON PROCEDURE DELETE_SK TO SYSDBA;
Для таблицы STOIMOST.
create or alter procedure DELETE_ST (
VID_NAZNACHENIYA_A varchar(30))
as
begin
delete from STOIMOST where VID_NAZNACHENIYA=:VID_NAZNACHENIYA_A;
suspend;
end^
SET TERM ; ^
GRANT SELECT,DELETE ON STOIMOST TO PROCEDURE DELETE_ST;
GRANT EXECUTE ON PROCEDURE DELETE_ST TO SYSDBA;
Для таблицы OBRASHENIYA.
create or alter procedure DELETE_OB (
ID_PACIENTA_A integer,
ID_VRACHA_A integer)
as
begin
delete from OBRASHENIYA where ID_PACIENTA=:ID_PACIENTA_A and ID_VRACHA=:ID_VRACHA_A;
suspend;
end^
SET TERM ; ^
GRANT SELECT,DELETE ON OBRASHENIYA TO PROCEDURE DELETE_OB;
GRANT EXECUTE ON PROCEDURE DELETE_OB TO SYSDBA;
Создание хранимых процедур на добавление.
В таблицу VRACHI.
create or alter procedure INSERT_VR (
ID_VRACHA_A integer,
V_FAMILIYA_A varchar(30),
V_NAME_A varchar(30),
V_OTCHESTVO_A varchar(30),
SPECIALNOST_A varchar(30),
KVALIFIKACIYA_A varchar(30))
as
begin
insert into VRACHI (ID_VRACHA, V_FAMILIYA, V_NAME,V_OTCHESTVO, SPECIALNOST, KVALIFIKACIYA)
values (:ID_VRACHA_A,:V_FAMILIYA_A,:V_NAME_A,:V_OTCHESTVO_A,:SPECIALNOST_A,:KVALIFIKACIYA_A);
suspend;
end ^
SET TERM ; ^
GRANT INSERT ON VRACHI TO PROCEDURE INSERT_VR;
GRANT EXECUTE ON PROCEDURE INSERT_VR TO SYSDBA;
В таблицу PACIENTI.
create or alter procedure INSERT_PA (
P_FAMILIYA_A varchar(30),
P_NAME_A varchar(30),
P_OTCHESTVO_A varchar(30),
GOD_ROZHDENIYA_A integer,
KATEGORIYA_SKIDKI_A integer)
as
begin
insert into PACIENTI (P_FAMILIYA, P_NAME, P_OTCHESTVO, GOD_ROZHDENIYA, KATEGORIYA_SKIDKI)
values (:P_FAMILIYA_A,:P_NAME_A,:P_OTCHESTVO_A,:GOD_ROZHDENIYA_A,:KATEGORIYA_SKIDKI_A);
suspend;
end ^
SET TERM ; ^
GRANT INSERT ON PACIENTI TO PROCEDURE INSERT_PA;
GRANT EXECUTE ON PROCEDURE INSERT_PA TO SYSDBA;
В таблицу SKIDKI.
create or alter procedure INSERT_SK (
KATEGORIYA_SKIDKI_A integer,
S_NAIMENOVANIE_A varchar(30),
SIZE_SKIDKI_A integer)
as
begin
insert into SKIDKI (KATEGORIYA_SKIDKI,S_NAIMENOVANIE,SIZE_SKIDKI)
values (:KATEGORIYA_SKIDKI_A,:S_NAIMENOVANIE_A,:SIZE_SKIDKI_A);
suspend;
end^
SET TERM ; ^
GRANT INSERT ON SKIDKI TO PROCEDURE INSERT_SK;
GRANT EXECUTE ON PROCEDURE INSERT_SK TO SYSDBA;
В таблицу STOIMOST.
create or alter procedure INSERT_ST (
VID_NAZNACHENIYA_A varchar(30),
N_NAIMENOVANIE_A varchar(30),
CENA_A integer)
as
begin
insert into STOIMOST (VID_NAZNACHENIYA,N_NAIMENOVANIE,CENA)
values (:VID_NAZNACHENIYA_A,:N_NAIMENOVANIE_A,:CENA_A);
suspend;
end^
SET TERM ; ^
GRANT INSERT ON STOIMOST TO PROCEDURE INSERT_ST;
GRANT EXECUTE ON PROCEDURE INSERT_ST TO SYSDBA;
В таблицу OBRASHENIYA.
create or alter procedure INSERT_OB (
ID_PACIENTA_A integer,
ID_VRACHA_A integer,
TIME_PRIEMA_A time,
DIAGNOZ_A varchar(30),
VID_NAZNACHENIYA_A varchar(30),
DATE_OBRASHENIYA_A integer,
STOIMOST_LECHENIYA_A numeric(4,2))
as
begin
insert into OBRASHENIYA (ID_PACIENTA, ID_VRACHA, TIME_PRIEMA, DIAGNOZ, VID_NAZNACHENIYA, DATE_OBRASHENIYA, STOIMOST_LECHENIYA)
values (:ID_PACIENTA_A,:ID_VRACHA_A,:TIME_PRIEMA_A,:DIAGNOZ_A,:VID_NAZNACHENIYA_A,:DATE_OBRASHENIYA_A,:STOIMOST_LECHENIYA_A);
suspend;
end^
SET TERM ; ^
GRANT INSERT ON OBRASHENIYA TO PROCEDURE INSERT_OB;
GRANT EXECUTE ON PROCEDURE INSERT_OB TO SYSDBA;
Создание хранимых процедур на обновление.
В таблице VRACHI.
create or alter procedure UPDATE_VR (
ID_VRACHA_A integer,
V_FAMILIYA_A varchar(30),
V_NAME_A varchar(30),
V_OTCHESTVO_A varchar(30),
SPECIALNOST_A varchar(30),
KVALIFIKACIYA_A varchar(30))
as
begin
update VRACHI set ID_VRACHA= :ID_VRACHA_A,V_FAMILIYA= :V_FAMILIYA_A,V_NAME=:V_NAME_A,V_OTCHESTVO=:V_OTCHESTVO_A,SPECIALNOST=:SPECIALNOST_A,KVALIFIKACIYA=:KVALIFIKACIYA_A
where ID_VRACHA=:ID_VRACHA_A;
suspend;
end^
SET TERM ; ^
GRANT SELECT,UPDATE ON VRACHI TO PROCEDURE UPDATE_VR;
GRANT EXECUTE ON PROCEDURE UPDATE_VR TO SYSDBA;
В таблице PACIENTI.
create or alter procedure UPDATE_PA (
ID_PACIENTA_A integer,
P_FAMILIYA_A varchar(30),
P_NAME_A varchar(30),
P_OTCHESTVO_A varchar(30),
GOD_ROZHDENIYA_A integer,
KATEGORIYA_SKIDKI_A integer)
as
begin
update PACIENTI set ID_PACIENTA= :ID_PACIENTA_A,P_FAMILIYA= :P_FAMILIYA_A,P_NAME=:P_NAME_A,P_OTCHESTVO=:P_OTCHESTVO_A,GOD_ROZHDENIYA=:GOD_ROZHDENIYA_A,KATEGORIYA_SKIDKI= :KATEGORIYA_SKIDKI_A
where ID_PACIENTA=:ID_PACIENTA_A;
suspend;
end^
SET TERM ; ^
GRANT SELECT,UPDATE ON PACIENTI TO PROCEDURE UPDATE_PA;
GRANT EXECUTE ON PROCEDURE UPDATE_PA TO SYSDBA;
В таблице SKIDKI.
create or alter procedure UPDATE_SK (
KATEGORIYA_SKIDKI_A integer,
S_NAIMENOVANIE_A varchar(30),
SIZE_SKIDKI_A integer)
as
begin
update SKIDKI set KATEGORIYA_SKIDKI= :KATEGORIYA_SKIDKI_A, S_NAIMENOVANIE=:S_NAIMENOVANIE_A, SIZE_SKIDKI=:SIZE_SKIDKI_A
where KATEGORIYA_SKIDKI=:KATEGORIYA_SKIDKI_A;
suspend;
end^
SET TERM ; ^
GRANT SELECT,UPDATE ON SKIDKI TO PROCEDURE UPDATE_SK;
GRANT EXECUTE ON PROCEDURE UPDATE_SK TO SYSDBA;
В таблице STOIMOST.
create or alter procedure UPDATE_ST (
VID_NAZNACHENIYA_A varchar(30),
N_NAIMENOVANIE_A varchar(30),
CENA_A integer)
as
begin
update STOIMOST set VID_NAZNACHENIYA=:VID_NAZNACHENIYA_A, N_NAIMENOVANIE=:N_NAIMENOVANIE_A,CENA=:CENA_A
where VID_NAZNACHENIYA=:VID_NAZNACHENIYA_A;
suspend;
end^
SET TERM ; ^
GRANT SELECT,UPDATE ON STOIMOST TO PROCEDURE UPDATE_ST;
GRANT EXECUTE ON PROCEDURE UPDATE_ST TO SYSDBA;
В таблице OBRASHENIYA.
create or alter procedure UPDATE_OB (
ID_PACIENTA_A integer,
ID_VRACHA_A integer,
TIME_PRIEMA_A time,
DIAGNOZ_A varchar(30),
VID_NAZNACHENIYA_A varchar(30),
DATE_OBRASHENIYA_A integer,
STOIMOST_LECHENIYA_A numeric(4,2))
as
begin
update OBRASHENIYA set ID_PACIENTA=:ID_PACIENTA_A, ID_VRACHA=:ID_VRACHA_A,TIME_PRIEMA=:TIME_PRIEMA_A,DIAGNOZ=:DIAGNOZ_A,VID_NAZNACHENIYA=:VID_NAZNACHENIYA_A,DATE_OBRASHENIYA=:DATE_OBRASHENIYA_A,STOIMOST_LECHENIYA=:STOIMOST_LECHENIYA_A
where ID_PACIENTA=:ID_PACIENTA_A;
suspend;
end^
SET TERM ; ^
GRANT SELECT,UPDATE ON OBRASHENIYA TO PROCEDURE UPDATE_OB;
GRANT EXECUTE ON PROCEDURE UPDATE_OB TO SYSDBA;
Создание хранимой процедуры на вычисление стоимости лечения.
create or alter procedure STOIMOST_L (
N integer,
VID_NAZNACHENIYA_A varchar(20),
ID_PACIENTA_A integer)
returns (
X numeric(4,2),
Y numeric(4,2))
as
begin
select STOIMOST.CENA from STOIMOST
where STOIMOST.VID_NAZNACHENIYA=:VID_NAZNACHENIYA_A
into :X;
select SKIDKI.SIZE_SKIDKI from SKIDKI left join PACIENTI
on PACIENTI.KATEGORIYA_SKIDKI=SKIDKI.KATEGORIYA_SKIDKI
where PACIENTI.ID_PACIENTA=:ID_PACIENTA_A
into :Y;
update OBRASHENIYA
set stoimost_lecheniya=:X*(1-:Y)
where OBRASHENIYA.N=:N;
end^
SET TERM ; ^
GRANT SELECT ON STOIMOST TO PROCEDURE STOIMOST_L;
GRANT SELECT ON SKIDKI TO PROCEDURE STOIMOST_L;
GRANT SELECT ON PACIENTI TO PROCEDURE STOIMOST_L;
GRANT SELECT,UPDATE ON OBRASHENIYA TO PROCEDURE STOIMOST_L;
GRANT EXECUTE ON PROCEDURE STOIMOST_L TO SYSDBA;
Создание хранимой процедуры на вывод информации о враче по заданной специальности.
create or alter procedure SPECIALNOST_VR (
SPECIALNOST_A varchar(30))
returns (
ID_VRACHA integer,
SPECIALNOST varchar(30),
V_FAMILIYA varchar(30),
V_NAME varchar(30),
V_OTCHESTVO varchar(30),
KVALIFIKACIYA varchar(30))
as
begin
for select ID_VRACHA, SPECIALNOST, V_FAMILIYA, V_NAME, V_OTCHESTVO, KVALIFIKACIYA from VRACHI
where SPECIALNOST = :SPECIALNOST_A
into :ID_VRACHA,:SPECIALNOST,:V_FAMILIYA,:V_NAME,:V_OTCHESTVO,:KVALIFIKACIYA
do
suspend;
end^
SET TERM ; ^
GRANT SELECT ON VRACHI TO PROCEDURE SPECIALNOST_VR;
GRANT EXECUTE ON PROCEDURE SPECIALNOST_VR TO SYSDBA;