РАЗРАБОТКА СЕРВЕРНОЙ ЧАСТИ
5.1. Общее описание.
Серверная часть программы, реализованная средствами сервера InterBase, состоит из 8 таблиц, 26 хранимых процедур, 8 генераторов.
Данные хранятся в таблицах в несортированном виде. Имеются следующие таблицы:
Таблица предприятий;
Таблица экономических показателей предприятия;
Таблица показателей материальной базы предприятия;
Таблица режимов предприятия;
Таблица архива заказов предприятия;
Таблица изделий;
Таблица размеров изделий;
Таблица заказчиков.
Количество таблиц и поля в них соответствуют разработанной модели знаний.
Хранимые процедуры обеспечивают добавление данных в таблицы, их модификацию и удаление. Также ими обеспечивается выдача сервером данных о количестве записей для проверки базы знаний на полноту.
Применение хранимых процедур позволяет упростить клиентскую часть, снизить требования к компьютеру клиента, а также пропускной способности сети.
Реализованы следующие хранимые процедуры:
CHECK_FOR_FULL_ENTR – проверка на полноту таблиц, связанных с таблицей предприятий;
CHECK_FOR_FULL_IZD – проверка на полноту таблиц, связанных с таблицей изделий;
P_ARCHIVE_DELETE – удаление записей из таблицы «Архив заказов»;
P_ARCHIVE_INSERT – добавление записей в таблицу «Архив заказов»;
P_ARCHIVE_MODIFY – изменение записей в таблице «Архив заказов»;
P_ECPARAMS_DELETE – удаление записей из таблицы «Экономические показатели»;
P_ECPARAMS_INSERT – добавление записей в таблицу «Экономические показатели»;
P_ECPARAMS_MODIFY – изменение записей в таблице «Экономические показатели»;
P_ENTR_DELETE – удаление записей из таблицы «Предприятия»;
P_ENTR_INSERT – добавление записей в таблицу «Предприятия»;
P_ENTR_MODIFY – изменение записей в таблице «Предприятия»;
P_IZDELIE_DELETE – удаление записей из таблицы «Изделия»;
P_IZDELIE_INSERT – добавление записей в таблицу «Изделия»;
P_IZDELIE_MODIFY – изменение записей в таблице «Изделия»;
P_MATBASE_DELETE – удаление записей из таблицы «Материальная база»;
P_MATBASE_INSERT – добавление записей в таблицу «Материальная база»;
P_MATBASE_MODIFY – изменение записей в таблице «Материальная база»;
P_SECURITY_DELETE – удаление записей из таблицы «Режимы предприятия»;
P_SECURITY_INSERT – добавление записей в таблицу «Режимы предприятия»;
P_SECURITY_MODIFY – изменение записей в таблице «Режимы предприятия»;
P_SIZES_DELETE – удаление записей из таблицы «Размеры изделия»;
P_SIZES_INSERT – добавление записей в таблицу «Размеры изделия»;
P_SIZES_MODIFY – изменение записей в таблице «Размеры изделия»;
P_ZAKAZCHIK_DELETE – удаление записей из таблицы «Заказчики»;
P_ZAKAZCHIK_INSERT – добавление записей в таблицу «Заказчики»;
P_ZAKAZCHIK_MODIFY – изменение записей в таблице «Заказчики»;
Также средствами сервера обеспечивается целостность базы фактов. Это достигается тем, что при любом изменении данных производится запуск транзакции. Если хотя бы одна операция, входящая в транзакцию, не может быть успешно завершена, происходит отмена изменений и откат к предыдущему целостному состоянию. Если все операции, входящие в транзакцию, завершаются успешно, происходит запись изменений в базу.
При удалении записи происходит автоматическая проверка на наличие связанных с ней записей и их удаление в подчинённых таблицах.
Генераторы при каждом обращении к ним обеспечивают выдачу уникальных целочисленных значений. С их помощью можно обеспечить уникальных значений в тех ключевых полях таблиц, в которые необходимо автоматически заносить значение.
Определим типы и размеры полей в таблицах:
Предприятия:
EntKey – INTEGER (4 байта);
Name – VARCHAR (60 байт);
Address – VARCHAR строка (60 байт);
Phone – VARCHAR строка (30 байт);
Comment – VARCHAR (300 байт).
Таким образом, объём одной записи равен 454 байта.
Экономические показатели:
Number – INTEGER (4 байта);
Value1 и Value2 – VARCHAR (30 байт);
Comment – VARCHAR (300 байт);
EntKey – INTEGER (4 байта).
Объём одной записи равен 368 байт.
Материальная база:
Number – INTEGER (4 байта);
Value1 и Value2 – VARCHAR (30 байт);
Comment – VARCHAR (300 байт);
EntKey – INTEGER (4 байта).
Объём одной записи равен 368 байт.
Режимы предприятия:
SecKey – INTEGER (4 байта);
Name – VARCHAR (20 байт);
Comment – VARCHAR (300 байт);
EntKey – INTEGER (4 байта).
Объём одной записи равен 328 байт.
Архив:
Number – INTEGER (4 байта);
IzdName – VARCHAR строка (60 байт);
KolZak – INTEGER (4 байта);
Comment – VARCHAR (300 байт);
EntKey – INTEGER (4 байта).
Объём одной записи равен 372 байта.
Изделие:
IzdKey – INTEGER (4 байта);
Name – VARCHAR (40 байт);
Vid_Sb – VARCHAR (30 байт);
EntKey – INTEGER (4 байта);
IsgDate – TIMESTAMP (8 байт);
KolZak – INTEGER (4 байта).
Объём одной записи равен 90 байт.
Размеры:
SizeKey – INTEGER (4 байта);
Name – VARCHAR (30 байт);
Description – VARCHAR (300 байт);
IzdKey – INTEGER (4 байта).
Объём одной записи равен 338 байт.
Заказчик:
EntKey – INTEGER (4 байта);
Name – VARCHAR (60 байт);
Address – VARCHAR (60 байт);
Phone – VARCHAR (30 байт);
Comment – VARCHAR (300 байт);
IzdKey – INTEGER (4 байта).
Объём одной записи равен 458 байт.
Видно, что при выбранных размерах полей объём ни одной записи не превышает 1 килобайта, что соответствует требованиям технического задания.
При заданном в техническом задании максимальном количестве записей 10000 штук в таблице максимальный объём данных равен:
(454+368+368+328+372+90+338+458)*10000 = 27760000 байт = 26.47 Мбайт
Таким образом, максимальный объём данных не превышает 100 Мбайт, что также соответствует требованиям технического задания.
Также сервер InterBase предоставляет такие средства администрирования, как механизм управления пользовательскими полномочиями, средства резервного копирования, «сборки мусора» и т. д.
5.2. Типичные процедуры.
Хранимые процедуры представляют собой подпрограммы, реализованные на языке SQL.
Пример процедуры добавления данных для таблицы «Предприятия»:
ALTER PROCEDURE P_ENTR_INSERT
(
PNAME VARCHAR(60) CHARACTER SET WIN1251, /*Название предприятия*/
PADDRESS VARCHAR(60) CHARACTER SET WIN1251, /*Адрес предприятия*/
PPHONE VARCHAR(30) CHARACTER SET WIN1251, /*Телефон предприятия*/
PCOMMENT VARCHAR(300) CHARACTER SET WIN1251 /*Комментарий*/
)
AS
BEGIN
INSERT INTO ENTERPRISES (NAME,ADDRESS,PHONE,COMMENT,ENTKEY) //добавление
данных в таблицу
VALUES (:PNAME, :PADDRESS, :PPHONE, :PCOMMENT, 0);
END
В данной процедуре поступающие на вход данные добавляются в таблицу «Предприятия». При добавлении данных происходит автоматическое обращение к соответствующему генератору, и в поле ключа заносится уникальное значение.
Пример хранимой процедуры выдачи информации о количестве связанных записей с каждой записью таблицы «Предприятия», хранящихся в её подчинённых таблицах (т. е. выполняющей проверку на полноту):
ALTER PROCEDURE CHECK_FOR_FULL_ENTR
RETURNS
(
ENTK INTEGER, /*Ключ записи в таблице «Предприятия»*/
ECPARS INTEGER, /*Количество записей в таблице «Экономические показатели»*/
MBASE INTEGER, /*Количество записей в таблице «Материальная база»*/
SEC INTEGER, /*Количество записей в таблице «Режимы предприятия»*/
ARCH INTEGER, /*Количество записей в таблице «Архив»*/
IZD INTEGER /*Количество записей в таблице «Изделия»*/
)
AS
BEGIN
FOR SELECT ENTKEY FROM ENTERPRISES /*Для каждой записи из таблицы «Предприятия»…*/
INTO :ENTK /*Выдаём ключ*/
DO
BEGIN
SELECT COUNT(NUMBER) FROM ECONOMICPARAMS
WHERE ENTKEY=:ENTK /*Выдаём кол-во связанных записей в таблице «Экономические показатели»*/
INTO :ECPARS;
SELECT COUNT(NUMBER) FROM MATHERIALBASE
WHERE ENTKEY=:ENTK /*Выдаём кол-во связанных записей в таблице «Материальная база»*/
INTO :MBASE;
SELECT COUNT(SECKEY) FROM SECURITY
WHERE ENTKEY=:ENTK /*Выдаём кол-во связанных записей в таблице «Режимы предприятия»*/
INTO :SEC;
SELECT COUNT(NUMBER) FROM ARCHIVE
WHERE ENTKEY=:ENTK /*Выдаём кол-во связанных записей в таблице «Архив»*/
INTO :ARCH;
SELECT COUNT(IZDKEY) FROM IZDELIE
WHERE ENTKEY=:ENTK /*Выдаём кол-во связанных записей в таблице «Изделия»*/
INTO :IZD;
SUSPEND; /*Передаём параметры (т. е. строку таблицы) клиенту */
END
END
При обращении к процедуре для каждой записи таблицы предприятия производится подсчёт связанных с ней записей в подчинённых таблицах. На выходе процедуры – таблица с числовыми значениями.
Аналогично выполняется подсчёт в таблицах, связанных с таблицей «Изделия».