- •Лабораторная работа №1. Операции с базой данных
- •Ход работы
- •Создание базы данных
- •Регистрация базы данных
- •Подключение к базе данных
- •Удаление базы данных
- •Извлечение метаданных
- •Резервное копирование и восстановление
- •Отчет о выполнении работы
- •Лабораторная работа №2. Домены
- •Домены (Domains)
- •Задание
- •Ход работы
- •Отчет о выполнении работы
- •Лабораторная работа №4. Ограничения
- •Ограничение первичного ключа (Primarykey)
- •Ограничения уникальности (Unique)
- •Ограничения внешнего ключа (Foreignkeys)
- •Ограничения атрибутов (Checks)
- •Задание
- •Ход работы
- •Отчет о выполнении работы
- •Лабораторная работа №5. Триггеры, генераторы, исключения
- •Бизнес-правила
- •Триггеры (Triggers)
- •Исключения (Exceptions) и обработка ошибок
- •Операторы языка хранимых процедур и триггеров
- •If … then … else
- •Задание
- •Ход работы
- •Отчет о выполнении работы
- •Организация доступа к данным
- •TibDatabase
- •Подсоединение к бд
- •TibTransaction
- •Датасеты
- •IbDataSet
- •Буферизация записей
- •Обновление данных
- •Перебор записей
- •Master-Detail
- •Locate (поиск)
- •Работа с blob
- •Jpeg в Blob
- •Blob и dbGrid
- •IbTable
- •Почему компонент ibTable не рекомендуют?
- •IbQuery
- •Параметризированные запросы
- •Фильтрация
- •IbTable
- •IbDataSet, ibQuery
- •OnFilterRecord
- •IbUpdateSql
- •IbUpdateSqlw
- •IbStoredProc
- •EibError
- •IbDatabaseInfo
- •IbsqlMonitor
- •IbEvents
- •IbExtract
- •IbConnectionBroker
- •IbScript
- •IbsqlParser
- •IbDatabaseIni
Задание
Лабораторную работу следует выполнять в следующем порядке:
Создать на компьютере sqledu02 рабочую папку для хранения файлов, получаемых при выполнении лабораторной работы №2. Эта папка должна располагаться в той же папке, что и папка для лабораторной работы №1, и называться "ЛР2" .
Скопировать в эту папку файл сценария, созданный при выполнении лабораторной работы №1.
Открыть окно "Редактор скриптов" в приложении "IBExpert".
Используя кнопку [Загрузить из файла] на панели инструментов, открыть диалоговое окно "Open SQL File" и с его помощью открыть файл сценария, скопированный ранее в папку "ЛР2".
5.Изменить в сценарии путь до файла с базой данных, чтобы база данных создавалась в папке "ЛР2".
Добавить в сценарий команды создания доменов с использованием всех типов полей, приведенных в табл.1. Необходимо обязательно следовать правилам оформления текста сценария.
Выполнить сценарий, создав в базе данных не менее 11 доменов.
Сохранить файл сценария.
Зарегистрировать базу данных в приложении "IBExpert" и подключиться к созданной базе данных.
Создать в диалоговом режиме столько доменов, сколько имеется в выпадающем списке колонки "Тип" типов данных.
Создать в папке "ЛР2" резервную копию базы данных.
Создать и сохранить в этой же папке файл с отчетом о выполнении лабораторной работы №2, который должен называться "Отчет.doc".
Ход работы
Подключившись к базе данных, можно выполнять операции по созданию, удалению и изменению доменов. В окне "Database Explorer" появляются вложенные узлы, которые можно использовать для выполнения операций с доменами.
Чтобы добавить новый домен, необходимо воспользоваться командой "Новый домен" контекстного меню узла "Домены". В результате откроется окно со сведениями о доменах (Рис. 1).
Рис. 1: Окно создания Домена
Для изменения имени домена достаточно отредактировать его в столбце "Имя домена". Для изменения типа данных следует воспользоваться выпадающим списком в столбце "Тип" (Рис. 2). Длину текстового поля можно изменить, если отредактировать значение в столбце "Длина".
Рис. 2: Окно "Database Explorer" с перечнем типов данных
Чтобы сделанные изменения были выполнены, необходимо нажать кнопку [Компиляция] (Ctrl+F9). В результате этого откроется диалоговое окно "Компиляция доменов…" (Рис. 3), в котором надо подтвердить (кнопка [Подтвердить]) или отменить (кнопка [Откатить]) выполнение операции.
Рис. 3: Диалоговое окно "Компиляция доменов"
Отчет о выполнении работы
Отчет о выполнении лабораторной работы №2 необходимо оформить на листах формата A4.
Отчет должен содержать описание и результаты работы, представляемые в следующей последовательности:
Распечатка сценария создания базы данных с комментариями, которые должны содержать сведения об авторе, дате создания, всех выполняемых действиях и пояснения к доменам.
Перечень файлов, полученных при выполнении лабораторной работы с указанием их имен, места расположения, даты изменения и размеров (сценарий, база данных, резервная копия базы данных, файл с отчетом).
Лабораторная работа №3. Таблицы
Цель работы
Изучить способы создания, изменения и удаления таблиц. Получить навыки использования приложения "IBExpert" для создания, удаления и изменения структуры таблиц. Изучить SQL-операторы для работы с таблицами и индексами.
Исходные данные
Студент получает индивидуальный вариант исходных данных с кратким описанием предметной области, который используется при выполнении всех описанных в данном пособии лабораторных работ. При этом каждая очередная лабораторная работа является продолжением выполненной ранее и поэтому они должны обязательно выполняться последовательно.
Используемые программы
Все операции выполняются с помощью приложения "IBExpert". Отчет создается в редакторе "Microsoft Word".
Теоретические сведения
Таблицы (Tables)
Firebird – реляционная СУБД, поэтому все данные в Firebird хранятся в виде двумерных таблиц со строками и столбцами. Строки называются кортежами или записями, а столбцы – доменами или полями.
В этой лабораторной работе рассматриваются не правила проектирования правильного набора таблиц для хранения данных о некоторой предметной области, а только способы реального создания необходимых таблиц.
Основные ограничения, которым должны удовлетворять таблицы:
Каждый столбец в таблице имеет уникальное имя.
Все данные в столбце должны быть одного типа.
Порядок строк и столбцов в таблице не имеет значения.
В таблице не может быть двух одинаковых строк.
Язык, который управляет метаданными, называется Data Definition Language (DDL). К DDL относятся операторы для определения любых содержащихся в базе данных объектов, в том числе и таблиц. Операторы, определяющие структуру таблиц в Firebird, соответствуют стандарту SQL, и поэтому без изменений будут работать и во многих других СУБД.
Для создания таблиц используется оператор "CREATE TABLE", который приводит к созданию пустой таблицы. При создании таблиц задается имя таблицы, описание набора столбцов с их именами, типами и размерами, а также ограничения на хранящуюся в таблице информацию. Максимальная длина названий таблиц, полей и ограничений – 31 символ. Имена таблиц в пределах базы данных должны быть уникальными.
Каждый столбец в таблице должен иметь имя, уникальное в пределах таблицы, а также либо тип данных, либо выражение для вычисления значения столбца, либо ссылку на домен.
Упрощенный синтаксис оператора создания таблицы:
CREATE TABLE <Имя_Таблицы>
(
<описание столбца> [,
<описание столбца> | <ограничение> ...]
);
В определении столбца таблицы частично повторяется синтаксис, используемый при создании домена. Это понятно, поскольку оба описывают один и тот же объект. Синтаксис определения столбца:
<имя столбца> {<тип данных> | COMPUTED [BY] (<выражение>) | <имя домена>}
[DEFAULT [<литерал> | NULL | USER}]
[NOT NULL]
[<ограничение столбца>]
[COLLATE <порядок сортировки>]
Здесь элемент <выражение> означает выражение, которое будет вычисляться каждый раз при необходимости вернуть значение этого вычисляемого поля. Элемент <ограничение столбца> означает ограничение, которое задается при одновременном определении поля (функционально полностью аналогично варианту описания ограничения отдельной строкой при создании таблицы). Остальные элементы были описаны в предыдущей лабораторной работе.
В операторе CREATE TABLE элемент <ограничение> означает ограничение, которое задается на уровне таблицы без одновременного описания столбца*.
Пример создания таблицы "Человек" (домены ID и Name описаны в предыдущей лабораторной работе):
CREATE TABLE Person(
Pr_ID ID, -- номер человека
Pr_LastName Name, -- фамилия
Pr_FirstName Name, -- имя
Pr_Patronymic CHAR(30), -- отчество
Pr_FIO COMPUTED BY ( -- фамилия и инициалы
Pr_LastName || ' ' ||
SUBSTRING(Pr_FirstName FROM 1 FOR 1) || '.' ||
SUBSTRING(Pr_Patronymic FROM 1 FOR 1) || '.')
);
Первые три поля заданы с использованием доменов, тип поля Pr_Patronymic задан непосредственно при создании таблицы, а поле Pr_FIO является вычисляемым.
В этом операторе || означает операцию конкатенации (соединения) строк, SUBSTRING() – функция, возвращающая подстроку (в приведенном примере – первую букву полей "Pr_FirstName" и "Pr_Patronymic").
Если при описании поля не использовать домен, то Firebird все равно создает домен специально для этого поля. Имя таких доменов состоит из символов "RDB$" и порядкового номера. С такими системными доменами можно выполнять такие же операции, как и с обычными доменами.
Для удаления таблицы используется оператор DROP TABLE.
DROP TABLE Person; -- Пример удаления таблицы
Оператор ALTER TABLE предназначен для изменения структуры таблицы вместо ее удаления и повторного создания. С его помощью можно изменять названия полей, добавлять новые и удалять имеющиеся поля, а также добавлять и удалять ограничения.
Примеры операторов ALTER TABLE:
ALTER TABLE Person ADD Birthday DATE; -- добавление поля "День рождения"
ALTER TABLE Person DROP Pr_Patronymic; -- удаление поля "Отчество"
ALTER TABLE Person -- переименование поля "День рождения"
ALTER COLUMN Birthday TO Pr_Birthday;
Если требуется изменить тип поля, например, увеличить число символов, хранимых в поле, то необходимо изменять домен этого поля оператором ALTER DOMAIN или выполнить изменения в системных таблицах.
Индексы
Firebird (как и другие реляционные СУБД) хранит записи в таблицах в неупорядоченном виде. Записи, добавляемые в таблицу одна за другой, не обязательно окажутся "рядом". Данные, извлекаемые из таблицы, также не имеют какого-либо порядка, кроме того, который явно указан в запросе на выборку данных.
Индекс – это упорядоченный указатель на записи таблицы. Индекс состоит из пар значений "значение поля" – "физическое расположение записи", поэтому по значению поля (или полей), входящего в индекс, при помощи индекса можно быстро найти место в таблице, где располагается запись, содержащая это значение.
Устройство индексов на физическом уровне для нас совершенно не имеет значения. Важно только знать, что создание индексов может привести к значительному ускорению процессов поиска и сортировки.
Не следует создавать индекс на поля с ограниченным набором значений – например, на поле, хранящие пол человека, которое содержит только два значения – "м" и "ж".
Использование индексов имеет два отрицательных последствия:
Для индексов дополнительно тратится дисковое пространство.
Наличие индексов замедляет модификацию данных в таблице
Индексы создаются при помощи команды CREATE INDEX.
Синтаксис оператора создания индекса:
CREATE [UNIQUE] [ASC[ENDING] | DESC[ENGING]]
INDEX <Имя_Индекса> ON <Таблица> (Поле [, Поле ...]);
Индекс может быть либо возрастающим (ASC[ENDING]), либо убывающим (DESC[ENGING]). Если при создании индекса указать UNIQUE, то можно будет заносить в таблицу только уникальные значения индексированных полей.
Пример создания индекса:
-- индекс по фамилии человека:
CREATE INDEX Index_Person_Name ON Person(Pr_LastName);
По мере изменения данных в таблице производительность индекса уменьшается. Периодически требуется пересоздавать индекс, чтобы восстановить его производительность.
Чтобы пересоздать индекс, можно использовать следующие способы:
Перестроить индекс с помощью команды ALTER INDEX. Для этого надо последовательно выполнить две команды:
ALTER INDEX Имя_Индекса INACTIVE | ACTIVE;
Удалить индекс (командой DROP INDEX), а затем повторно создать его.
Выполнить резервное копирование и восстановление базы данных.
Индекс характеризуется числом в пределах от 0 до 1, которое называется статистикой. Это число зависит от числа различных значений поля в таблице. Оптимизатор запросов Firebird использует это число для определения эффективности применения индекса в запросе. Статистика определяется при создании и перестройке индекса, а также по команде пересчета статистики. Когда число записей в таблице изменяется, пересчет статистики может улучшить производительность. Пересчет статистики не перестраивает индекс, а только определяет статистику.
Команда пересчета статистики индекса:
SET STATISTICS INDEX Имя_Индекса;
Задание
Лабораторную работу следует выполнять в следующем порядке:
Создать на сервере sqledu02 рабочую папку для хранения файлов, получаемых при выполнении лабораторной работы №3. Эта папка должна быть рядом с папками для предыдущих лабораторных работ и называться "ЛР3".
Скопировать в эту папку файл сценария, созданный при выполнении лабораторной работы №2.
Открыть окно "Редактор скриптов" в приложении "IBExpert" и прочитать в него файл сценария, скопированный ранее в папку "ЛР3".
Изменить в сценарии путь до файла с базой данных, чтобы база данных создавалась в папке "ЛР3".
Добавить в сценарий команды создания таблиц в соответствии с индивидуальным заданием. Должно получиться не менее 5 таблиц. При описании полей необходимо использовать и созданные ранее домены и непосредственно типы данных. В таблицах должно быть не менее трех вычисляемых полей.
Добавить в сценарий команды создания нескольких индексов. Необходимо создать не менее, чем по одному индексу для каждой из созданных таблиц.
Выполнить сценарий и сохранить его в папке "ЛР3".
Зарегистрировать созданную базу данных в программе "IBExpert" и подключиться к ней.
Создать в своей базе данных таблицу в диалоговом режиме. Она должна называться "TestDialog" и содержать десять полей разных типов с произвольными именами. Скопировать в отчет сценарий создания таблицы "TestDialog", который сгенерирует "IBExpert".
Создать в диалоговом режиме в таблице "TestDialog" три различных индекса и сценарии их создания скопировать в отчет.
Создать в папке "ЛР3" резервную копию базы данных.
Создать и сохранить в папке "ЛР3" файл с отчетом о выполнении лабораторной работы №3, который должен называться "Отчет.doc".
Ход работы
Действия по созданию таблиц и индексов с помощью команд сценария не требуют пояснений, так как полностью соответствуют действиям, выполненным ранее при выполнении предыдущих лабораторных работ.
Для создания таблицы в диалоговом режиме, нажмите в окне "Database Explorer" правую клавишу мыши на узле "Таблицы" или на одной из имеющихся таблиц и в открывшемся меню выберите команду "Новая таблица (Ctrl+N)" (Рис 1). В результате откроется окно создания таблицы (Рис. 2).
Рис. 1: Окно "Database Explorer" создания таблицы
Рис. 2: Окно создания таблицы в диалоговом режиме
В верхней части этого окна вводится имя создаваемой таблицы (в приведенном случае – "TESTDIALOG").
Сетка в средней части окна содержит сведения о полях таблицы. Чтобы добавить поле в таблицу, следует нажать клавишу [Insert] или [Стрелка вниз]. В столбце "Название" вводится имя создаваемого поля, в колонке "Тип" выбирается тип данных, либо в колонке "Домен"– созданный ранее домен. Для текстовых полей (CHAR и VARCHAR) в колонке "Длина" вводится размер поля. Чтобы задать полю ограничение "NOT NULL" достаточно установить флажок в колонке "Не пусто".
В нижней части окна на вкладке "Описание поля" можно вводить для каждого поля поясняющие комментарии.
После ввода данных о всех полях таблицы следует нажать кнопку [Компиляция] (Ctrl+F9). В результате этого откроется диалоговое окно "Создание таблицы Имя_Таблицы…" (Рис. 3), в котором надо подтвердить (кнопка [Commit]) или отменить (кнопка [Откатить]) выполнение операции.
Рис. 3: Диалоговое окно создания таблицы
Если закрыть это диалоговое окно кнопкой [Подтвердить], то в окне "Database Explorer" появятся дополнительные строки и оно примет следующий вид (Рис. 4).
Рис. 4: Окно "Database Explorer
Теперь появится возможность добавить к таблице индексы. Для этого перейдите на вкладку "Индексы" (Рис. 5).
Рис. 5: Окно просмотра и редактирования индексов
Сетка на этой вкладке позволяет просматривать, редактировать, создавать и удалять индексы.
Для создания индекса выполните следующие действия:
Нажмите в этой сетке клавишу [Новый индекс]. В результате будет вставлена новая строка.
Задайте в колонке "Индекс" имя индекса.
Нажмите кнопку в колонке "На поле". В результате откроется окно с двумя списками (Рис. 5). В левом списке "Available fields" будут находиться поля, которые можно добавить к индексу, в правом списке "Included fields" будут находиться поля, которые уже включены в список. Для формирования перечня полей, которые будут входить в индекс, переместите нужные поля из левого списка в правый.
Если создается уникальный индекс, установите флажок в колонке "Уникальный".
Чтобы активировать индекс установите флажок в колонке "Активность".
В колонке "Тип сортировки" выберите способ сортировки.
Чтобы создать индекс нажмите кнопку [Компиляция] (Ctrl+F9).
В результате откроется диалоговое окно (Рис. 6), в котором надо под-твердить (кнопка [Подтвердить]) или отменить (кнопка [Откатить]) выполнение операции.
Рис. 6: Диалог создания индекса
После создания индекса его можно в любой момент изменить, если изменить параметры индекса и снова нажать кнопку [Компиляция].
Отчет о выполнении работы
Отчет о выполнении лабораторной работы №3 необходимо оформить на листах формата A4.
Отчет должен содержать описание и результаты работы, представляемые в следующей последовательности:
Краткое описание таблиц, предназначенных для моделирования предметной области в соответствии с вариантом.
Распечатка сценария создания базы данных с комментариями, которые должны содержать сведения об авторе, дате создания, всех выполняемых действиях и пояснения к таблицам и индексам.
Перечень файлов, полученных при выполнении лабораторной работы с указанием их имен, места расположения, даты изменения и размеров (сценарий, база данных, резервная копия базы данных, файл с отчетом).