
- •Содержание
- •Введение
- •1 Формализация задачи
- •1.1 Словесное описание предметной области
- •1.2 Описание иерархии функций
- •1.3 Выбор субд
- •2 Проектирование и создание бд
- •2.1 Информационная модель предметной области
- •2.1.2 Перекрестная проверка модели данных и модели функций
- •2.1.3 Документирование er – диаграммы
- •2.2 Логическая модель бд
- •2.2.2 Схема базы данных приведённая к третьей нормальной форме.
- •2.2.3 Графическое представление связей между таблицами
- •2.3 Физическая модель бд
- •2.3.1 Техническое описание таблиц
- •2.3.2 Тексты sql-скриптов для создания объектов бд
- •3 Описание приложения
- •3.1 Описание технологии обработки данных
- •3.2 Описание программ
- •Заключение
- •Список использованной литературы
- •Приложение а (обязательное) Исходные тексты программ
- •Приложение б (справочное) Экранные формы
2.3.2 Тексты sql-скриптов для создания объектов бд
Для создания базы данных использовался язык описания данных SQL. Тексты SQL-скриптов, для создания базы данных:
Создаем домены
CREATE DOMAIN "KOD" AS INTEGER
check (value>0) NOT NULL;
CREATE DOMAIN "STOIM" AS FLOAT
check (value>0) NOT NULL;
CREATE DOMAIN "STR" AS CHAR(30) CHARACTER SET WIN1251 NOT NULL;
Создаем таблицу «Клиент физическое лицо»
CREATE TABLE "KLFIZ"
(
"KOD" "KOD",
"FAM" "STR",
"NAME" "STR",
"OTCH" "STR",
"N_TELEFON" INTEGER,
"ADR" "STR",
PRIMARY KEY ("KOD")
);
Создаем таблицу « Клиент юридическое лицо »
CREATE TABLE "KLUR"
(
"KOD" "KOD",
"NAZVANIYE" "STR",
"FORMA_SOBSTVENTI" "STR",
"FAM_DIR" "STR",
"NAME_DIR" "STR",
"OTCH_DIR" "STR",
"ADR" "STR",
"NAME_BANK" "STR",
"ADR_BANK" "STR",
"KOR_CHET" "STR",
"NRACH_CHET" "STR",
"BIK" "STR",
"INN_KPP" "STR",
PRIMARY KEY ("KOD")
);
Создаем таблицу «Предприятие-провайдер»
CREATE TABLE "PRED_PROVAIDER"
(
"KOD" "KOD",
"NAZVANIE" "STR",
"ADR" "STR",
"N_TELEFON" "STR",
PRIMARY KEY ("KOD")
);
Создаем таблицу «Прейскурант»
CREATE TABLE "PRESKUR"
(
"KOD_PROV" "KOD",
"DAT" DATE NOT NULL,
"STOIM" "STOIM",
"LGSTOIM_20_2" "STOIM",
"LGSTOIM_2_6" "STOIM",
PRIMARY KEY ("KOD_PROV", "DAT")
);
ALTER TABLE "PRESKUR" ADD FOREIGN KEY ("KOD_PROV") REFERENCES PRED_PROVAIDER ("KOD") ON UPDATE CASCADE;
Создаем таблицу «Сеанс»
CREATE TABLE "SEANC"
(
"KOD" "KOD",
"MAC_ADR" "STR",
"IP_ADR" "STR",
"VR_NACH" "STR",
"VR_KON" "STR",
"STOIM" "STOIM",
"KOD_KLF" INTEGER,
"KOD_KLU" INTEGER,
"KOD_PP" "KOD",
"DATA_KON" DATE,
"DATA" DATE,
PRIMARY KEY ("KOD")
);
ALTER TABLE "SEANC" ADD FOREIGN KEY ("KOD_KLF") REFERENCES KLFIZ ("KOD");
ALTER TABLE "SEANC" ADD FOREIGN KEY ("KOD_KLU") REFERENCES KLUR ("KOD");
ALTER TABLE "SEANC" ADD FOREIGN KEY ("KOD_PP") REFERENCES PRED_PROVAIDER ("KOD") ON UPDATE CASCADE;
Создаем генераторы для таблиц
CREATE GENERATOR "GEN_KLFIZ";
CREATE GENERATOR "GEN_KLUR";
CREATE GENERATOR "PRED_PROVAIDER";
CREATE GENERATOR "PRESKUR";
CREATE GENERATOR "SEANC";
Триггер для таблицы «Клиент физическое лицо»– генерация ключа
SET TERM ^ ;
CREATE TRIGGER "KLFIZ_INS" FOR "KLFIZ"
ACTIVE BEFORE INSERT POSITION 0
as
begin
new.KOD=GEN_ID(GEN_KLFIZ,1);
end
^ COMMIT WORK ^
SET TERM ;^
Триггер для таблицы «Клиент юридическое лицо»– генерация ключа
SET TERM ^ ;
CREATE TRIGGER "KLUR_INS" FOR "KLUR"
ACTIVE BEFORE INSERT POSITION 0
as
begin
new.KOD=GEN_ID(gen_KLUR,1);
end
^
COMMIT WORK ^
SET TERM ;^
Триггер для таблицы «Предприятие-провайдер»– генерация ключа
SET TERM ^ ;
CREATE TRIGGER "PRED_PROVAIDER_INS" FOR "PRED_PROVAIDER"
ACTIVE BEFORE INSERT POSITION 0
as
begin
new.KOD=GEN_ID(PRED_PROVAIDER,1);
end
^
COMMIT WORK ^
SET TERM ;^
Триггер для таблицы «Сеанс»– генерация ключа
SET TERM ^ ;
CREATE TRIGGER "SEANC_INS" FOR "SEANC"
ACTIVE BEFORE INSERT POSITION 0
as
begin
new.KOD=GEN_ID(SEANCE,1);
end
^
COMMIT WORK ^
SET TERM ;^
Триггер для таблицы «Клиент физическое лицо»– обновление
SET TERM ^ ;
CREATE TRIGGER "KLFIZ_UP" FOR "KLFIZ"
ACTIVE BEFORE UPDATE POSITION 0
as
begin
update SEANCE
set KOD_KLF=new.KOD
where KOD_KLF=old.KOD;
end
^
COMMIT WORK ^
SET TERM ;^
Триггер для таблицы «Клиент юридическое лицо»– обновление
SET TERM ^ ;
CREATE TRIGGER "KLUR_UP" FOR "KLUR"
ACTIVE BEFORE UPDATE POSITION 0
as
begin
update SEANCE
set KOD_KLU=new.KOD
where KOD_KLU=old.KOD;
end
^
COMMIT WORK ^
SET TERM ;^
Запросы.
Запрос 1.
Определить количество клиентов за заданный месяц.
select count(*) as "kolvo"
from "SEANC"
where "DATA" between :dat1 and :dat2 and "KOD_PP"=:kpp
Запрос 2.
Дата, на которое пришлось максимальное количество клиентов.
select "DATA"
from "SEANC"
where "KOD_PP"=:kpp
GROUP BY "DATA"
having count(*)>=all
(select count(*)
from "SEANC"
where "KOD_PP"=:kpp
group by "DATA")
Запрос 3.
Сведения о сеансах связи заданного клиента.
select KF."FAM", KF."NAME",KF."OTCH",S."STOIM",S."DATА"
from "SEANC" S,"KLFIZ" KF
WHERE S."KOD_KLF"=KF."KOD" AND KF."FAM"='Golenkovskaya'
select KU."NAZVANIYE",S."STOIM",S."DATА"
from "SEANC" S,"KLUR" KU
WHERE S."KOD_KLU"=KU."KOD" AND KU."NAZVANIYE"='Fenix'