Контрольная работа: Особенности проектирования баз данных
Внешний ключ
Таблица «Издательства» (Publishers)
Наименование поля | Тип данных | Ограничения |
ID Издательства (ID_Publishers) | Целое число |
NOTNULL Первичный ключ Значение уникально |
Название (Name) | Строка (20) | NOT NULL |
Город (City) | Строка (20) |
Таблица «Читатели» (Readers)
Наименование поля | Тип данных | Ограничения |
ID Абонента (ID_ abonent) | Целое число |
NOTNULL Первичный ключ Значение уникально |
ФИО (FIO) | Строка (30) | NOTNULL |
Телефон (Telephone) | Строка (10) | |
Адрес (Address) | Строка (20) | NOTNULL |
Реализация серверной части базы данных
Серверную часть базы данных будем выполнять на сервере FireBird 2.1 в визуальной среде разработки IBExpert.
Запустим IBExpert. Выберем команду Database/CreateDatabase (База данных/Создать базу данных). В появившемся окне CreateDatabase (Создание базы данных) укажем:
· Server (Сервер) – Local (локальный)
· Database (Файл БД) – C:\01\LIBRARY.fdb
· UserName (Имя_пользователя) – SYSDBA
· Password (пароль) – masterkey – это имя и пароль администратора по умолчанию.
· Charset (кодировка) – WIN1251
· SQL Dialect (Диалект БД) – Dialect 3 (Диалект 3).
Нажмём OK. база данных будет создана. В появившемся окне DatabaseRegister (Регистрация БД) выберем в поле Версия сервера FireBird 2.1. Нажмем кнопку Register, и база данных будет зарегистрирована и отобразится в окне DatabaseExplorer. В этом окне выберем зарегистрированную базу данных и выберем Database/ConnecttoDatabase (База данных/Подключиться к Базе данных). В окне DatabaseExplorer отобразятся все элементы базы данных.
Создание таблиц
Создадим таблицу «Книги» (Books). Выберем Database/NewTable (База данных/Новая таблица). В окне Table (Таблица) зададим имя Books и определим называния атрибутов их типы данных и ограничения. Откомпилируем скрипт, нажав <Ctrl+F9>.
Зададим ключевое поле таблицы «BOOKS». Для этого сделаем активной вкладку Constraint (Ограничения). Щелкнем правой кнопкой мыши в свободном пространстве окна Table (Таблица) и в выпадающем меню выберем пункт Newprimarykey (новый первичный ключ). Далее установим первичный ключ для атрибута «ID_BOOKS». Для этого щелкнем левой кнопкой мыши в поле OnField (На поле) и установим нужный атрибут. Установим сортировку по возрастанию значения индекса – выберем Ascending для IndexSorting.
Перейдём на вкладку Fields (поля) щелчком правой кнопкой мыши на поле «ID_BOOKS» вызовем меню, из которого выберем EditField ID_BOOKS. В появившемся окне перейдём на вкладку Autoincrement (авто приращение). Ниже появятся три дополнительные вкладки Generator (генератор) Trigger (триггер) и Procedure (процедура). На вкладке Generator выберем CreateGenerator (создать генератор), присвоим ему имя «GEN_BOOKS_ID» и начальное значение укажем равным 1. Перейдём на вкладку Trigger и выберем CreateTrigger (создать триггер). Автоматически будет написан код:
IF (NEW."ID_ BOOKS" IS NULL) THEN
NEW."ID_ BOOKS" = GEN_ID(GEN_BOOKS_ID,1);
Здесь содержится оператор условия. Если при обращении к новому значению столбца «ID_ BOOKS» (оператор NEW), оно является пустым (оператор IS NULL) то ему присваивается значение, генерируемое созданным ранее генератором GEN_BOOKS_ID (GEN_ID(имя_генератора, шаг) – оператор обращения к генератору). Нажмём «ОК» и откомпилируем скрипт.
Аналогично мы создадим при создании других таблиц генераторы и триггеры, присваивающие уникальные значения ключевым столбцам этих таблиц.
Создадим две оставшиеся таблицы: «Издательства» (Publishers) и «Читатели» (Readers).
Создание триггеров
Создадим триггеры журнализации изменений таблицы «BOOKS». Для этого создадим таблицу «BOOKS_JOURNAL», в которую будут автоматически записываться любые изменения, добавления, удаления в таблице «BOOKS». При этом будет фиксироваться дата (поле «DATE»), операция (INS, UPD, DEL) над таблицей «BOOKS» (поле «OPERATION»), а также старое и новое значение столбцов этой таблицы. Для операции удаления новое значение столбцов будет пустым. Для операции добавления пустым будет старое значение столбцов.
Для журнализации была создана таблица:
CREATE TABLE BOOKS_JOURNAL (