- •2 Семестр Лабораторная работа №2 Создание базы данных под управлением sql-сервера interbase и написание клиентского приложения
- •Теоретические сведения: / Указания по выполнению
- •Создание бд
- •Иерархия компонентов
- •Механизм master-detail
- •Ведение журнала
- •Указания по выполнению:
- •Контрольные вопросы:
- •Источники информации:
Механизм master-detail
Для нашего примера механизм master-detail используется следующим образом: в сетке DBGridMovie отображаются записи только того продюсера, запись которого является текущей в таблице Prod.
Свойство IBDataSetMovie.DataSource задается равным DataSourceProd, а свойство IBDataSetMovie.SelectSQL — 'SELECT * FROM MOVIE WHERE ID_PR = :ID_PR'. Значение параметра :ID_PR будет автоматически браться из одноименного поля ID_PR IBDatasetProd.
Кроме того, необходимо открывать IBDataSetMovie и IBDataSetProd в режиме rum-time, например:
procedure TForm1.FormCreate(Sender: TObject); begin IBDatasetProd.Open; // IBDatasetProd.Active:=True; IBDatasetMovie.Open; // IBDatasetMovie.Active:=True; end;
Эта процедура приведет к ошибке, если в design-time не установить предварительно свойства Active в False, либо открывать компоненты способом, приведенным в комментарии.
Чтобы включать/выключать режим master-detail в режиме run-time можно организовать CheckBox. По которому надо IBDataSetMovie.SelectSQL присвоить соответствующий текст и переоткрыть IBDataSetMovie.
Ведение журнала
С точки зрения безопасности небесполезной может оказаться информация о действиях пользователей над данными: кто и когда совершил то или иное действие над каким-либо объектом. Такого рода информацию приходится записывать в специальные таблицы при помощи трех триггеров AFTER INSERT, AFTER UPDATE и AFTER DELETE, используя системные переменные current_timestamp и current_user.
В нашем примере будет фиксироваться только время, пользователь и выполняемое им действие:
CREATE TABLE LOG ( "WHEN" TIMESTAMP, "USER" VARCHAR(20), "ACTION" CHAR(3) );
Триггеры для таблицы MOVIE:
CREATE TRIGGER TR_FOR_MOVIE_AI ACTIVE AFTER INSERT POSITION 0 AS BEGIN INSERT INTO "Log" VALUES (current_timestamp, current_user, 'INS'); END;
CREATE TRIGGER TR_FOR_MOVIE_AU ACTIVE AFTER UPDATE POSITION 0 AS BEGIN INSERT INTO "Log" VALUES (current_timestamp, current_user, 'UPD'); END;
CREATE TRIGGER TR_FOR_MOVIE_AD ACTIVE AFTER DELETE POSITION 0 AS BEGIN INSERT INTO "Log" VALUES (current_timestamp, current_user, 'DEL'); END;
Указания по выполнению:
Создать инфологическую модель выбранной предметной области.
Создать базу данных
Создать таблицы . Требования:
таблицы должны содержать ограничения /CONSTRAINT/ и значения по умолчанию);
продемонстрировать использование доменов, даже если это и нецелесообразно;
определить связи между таблицами путем определения первичных (PRIMARY) ключей у родительских и внешних (FOREIGN) ключей у дочерних таблиц;
создать необходимые индексы.
Создать генераторы и триггеры для реализации автоинкремента и триггеры для обеспечения бизнес-правил.
Создать хранимые процедуры действия и выборки.
Написать исключения и их обработчики.
Создать User Defined Functions.
Организовать журнал (log-таблицу) для одной любой таблицы БД. Помимо произведенного действия, времени и пользователя, журнал должен содержать сведения о подробностях изменений: какой столбец изменился, старое и новое значение столбца.
Создать приложение-клиент используя технологию Interbase Express. Требования:
приложение должно отражать работу со всеми созданными объектами БД;
продемонстрировать динамический режим включения механизма master-detail;
Подключиться к БД как к находящейся на сервере.
Оформить отчет по лабораторной работе.
скрипты по созданию всех используемых в БД объектов.
скрин-шоты клиентского приложения, отражающие результаты индексации, нарушения ограничений и ссылочной целостности, результатов работы хранимых процедур, исключений, триггеров, генераторов и UDF.
