- •2 Семестр Лабораторная работа №2 Создание базы данных под управлением sql-сервера interbase и написание клиентского приложения
- •Теоретические сведения: / Указания по выполнению
- •Создание бд
- •Иерархия компонентов
- •Механизм master-detail
- •Ведение журнала
- •Указания по выполнению:
- •Контрольные вопросы:
- •Источники информации:
Создание бд
При создании БД требуется указать ряд моментов:
Тип сервера (локальный /удаленный), имя сервера и сетевой протокол доступа к серверу.
Местонахождение и название файла будущей базы данных. Каталог для размещения БД у этому моменту должен быть создан.
Имя пользователя и пароль для доступа. После установки на сервере зарегистрирован единственный пользователь SYSDBA с паролем masterkey.
Размер страницы БД влияет на эффективность работы сервера (фактор влияния тем значительнее, чем больше размер БД). Файл базы данных разбивается на страницы фиксированного размера, и все обращения к диску выполняются постранично. Поэтому идеальным считается размер страницы совпадающий с размером записи и размером кластера диска. (Для NTFS — размер страницы = 4096 байт).
Кодировка определяет символы какого национального алфавита будет использоваться в БД по умолчанию. Именно по умолчанию, потому что при определении таблиц можно для любого символьного поля указать любой набор используемых символов.
Диалект может быть либо 1, либо 3 (диалект 2 используется для миграции между ними). Принципиально они отличаются: 1) диалект 3 позволяет использовать расширенный набор типов данных для работы с большими числами, для работы с датой и временем; 2) диалект 3 различает регистр идентификаторов, если идентификатор заключен в двойные кавычки; 3) диалект 3 не поддерживает неявное приведение типов данных (н-р, выражение '25'+5 в первом диалекте даст результат 30, а в третьем — ошибку несоответствия типов).
Рис. 1. Окно создания БД утилиты IBExpert
После создания БД можно создавать таблицы и другие объекты используя возможности GUI утилиты, либо при помощи SQL-редактора.
Для подключения к уже созданной БД на удаленном сервере, нужно указывать имя компьютера, на котором установлен сервер и полный путь к файлу БД, н-р, OUR_SERVER:C:\KINO\KINO.GDB
Инфологическая модель
В качестве примера выполнения лабораторной работы выбрана предметная область, условно названная KINO, содержащая информацию о кинофильмах, их продюсерах и снимающихся актерах.
Инфологическая модель представлена на рисунке:
Создание таблиц
Операторы, создающие таблицы выбранной предметной области:
CREATE DOMAIN D_Money INTEGER DEFAULT 0 CHECK (VALUE >= 0)
CREATE TABLE Prod ( id_pr INTEGER NOT NULL PRIMARY KEY, fio VARCHAR(30) NOT NULL, bd DATE, adres VARCHAR(50), money D_Money );
CREATE TABLE Movie ( id_m INTEGER NOT NULL PRIMARY KEY, title VARCHAR(40) NOT NULL UNIQUE, year INTEGER NOT NULL CHECK (year>1910), len INTEGER NOT NULL CHECK (len>20), kind CHAR(10) CHECK (kind IN ('Комедия', 'Боевик', 'Мелодрама')), id_pr INTEGER, FOREIGN KEY (id_pr) REFERENCES PROD ON DELETE SET NULL );
CREATE TABLE Star ( id_pr INTEGER NOT NULL PRIMARY KEY, fio VARCHAR(30) NOT NULL, bd DATE, adres VARCHAR(50), money D_Money );
CREATE TABLE StarIN ( Id_m INTEGER NOT NULL REFERENCES Movie ON UPDATE CASCADE ON DELETE CASCADE, Id_s, INTEGER NOT NULL REFERENCES Movie ON UPDATE CASCADE ON DELETE CASCADE, UNIQUE (Id_m, Id_m) );
CREATE INDEX I_Title ON Movie (Title);
CREATE INDEX I_FIO_Pr ON Prod (FIO);
CREATE INDEX I_FIO_St ON Movie (FIO);
Генераторы и автоинкремент
Суррогатные ключи, как известно, удобнее всего реализовывать при помощи механизма автоинкремента. В Interbase такой механизм в явном виде отсутствует. Однако, при помощи генераторов и триггеров не сложно добиться того же результата:
CREATE GENERATOR Gen_Movie_Id_m;
SET GENERATOR Gen_Movie_Id_m TO 1;
CREATE TRIGGER Trig_Movie_BI FOR MOVIE
ACTIVE BEFORE INSERT POSITION 0
AS BEGIN
IF (NEW.Id_m IS NULL) THEN NEW.Id_m = GEN_ID(Gen_Movie_Id_m,1);
END
Аналогичные скрипты — для других таблиц.
Триггеры
Одно из основных назначений триггеров — реализация бизнес-правил. Для примера, введем в нашей предметной области такое бизнес-правило: доход продюсера увеличивается на x% с каждым новым фильмом, где х — 10% от длины фильма.
CREATE TRIGGER INC_MONEY FOR MOVIE ACTIVE AFTER INSERT POSITION 0 AS declare variable x numeric(10, 5); begin x = NEW.LEN * 0.001; update prod set money=money * (1 + :x) where id_pr = NEW.id_pr; end
Хранимые процедуры
ХП делятся на возвращающие набор данных и действия, т.е. ничего не возвращающие. Пример ХП выборки: получить список актеров в порядке убывания количества фильмов с их участием.
CREATE PROCEDURE STAR_LIST RETURNS (FIO VARCHAR(30)) AS declare variable tmp INTEGER; begin FOR SELECT S.FIO, COUNT(*) FROM STAR S INNER JOIN "StarIN" SI ON S.ID_ST=SI.ID_S GROUP BY S.FIO ORDER BY 2 desc INTO :FIO, :tmp DO suspend; end
ХП действия не возвращают никаких данных, а только выполняют заложенный в них алгоритм.
Создание приложения
Общее описание основных компонентов, включенных в состав IBX:
Приложение-клиент разрабатывается при помощи программных средств Borland Delphi | C++ Builder, используя набор компонентов Interbase Express (IBX). Эти компоненты используют функции Intebase API, т.е. обращаются к серверу непосредственно.
