
- •Лабораторная работа №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
Домены (Domains)
Домен – это описание множества допустимых значений поля таблицы. Описание домена показывает тип данных (например, число или строка), длину данных и другие ограничения (например, требование, чтобы первый символ был буквой или чтобы значение не превышало заданного числа). В Firebird домены используются только в операторах создания и изменения структуры таблиц.
Для создания доменов используется команда CREATE DOMAIN, для изменения – ALTER DOMAIN, а для удаления – DROP DOMAIN.
Ниже приведен упрощенный синтаксис оператора создания домена.
CREATE DOMAIN Имя_Домена [AS] <тип данных>
[DEFAULT {литерал | NULL | USER}]
[NOT NULL]
[CHECK (Проверяемое_Условие)]
[COLLATE <порядок сортировки>];
При описании синтаксиса операторов квадратные скобки обозначают необязательный элемент, фигурные скобки объединяют группу элементов оператора в один, символ | означает выбор одной из нескольких альтернатив. Элемент, расположенный в угловых скобках должен поясняться отдельно.
В приведенном примере необязательный элемент
[DEFAULT {Literal | NULL | USER}]
позволяет задать значение столбца по умолчанию с использованием одной из трех возможностей. Первая возможность, обозначенная как Literal, позволяет задавать значения по умолчанию в виде текстовых констант, чисел и дат. Вторая возможность – указать в определении столбца DEFAULT NULL, что приведет к тому, что во вновь создаваемых записях значение этого столбца будет NULL. Третий способ – указать при определении столбца DEFAULT USER. Если в этом случае в таблицу будет вставлена строка без указания значения этого поля, то в него будет занесено имя текущего пользователя
Если необходимо, чтобы поле имело какое-то непустое значение, в описание домена вносят NOT NULL.
Необязательный элемент CHECK в описании домена позволяет заставить сервер проверять заносимые в базу данных значения на выполнение заданного условия.
Синтаксис условия домена в предложении CHECK:
<условие домена> ::=
VALUE <оператор> <значение>
| VALUE [NOT] BETWEEN <значение> AND <значение>
| VALUE [NOT] LIKE <значение>
| VALUE [NOT] IN (<значение> [, <значение> ...])
| VALUE IS [NOT] NULL
| VALUE [NOT] CONTAINING <значение>
| VALUE [NOT] STARTING [WITH] <значение>
| (<условие домена>)
| NOT <условие домена>
| <условие домена> OR <условие домена>
| <условие домена> AND <условие домена>
Ключевое слово VALUE замещает значение, присваиваемое столбцу, основанному на этом домене.
CHECK (VALUE BETWEEN 'AAA' AND 'ZZZ') --значение в интервале
CHECK ((VALUE = '0') OR (VALUE = ' 1') OR (VALUE IS NULL))
CHECK (VALUE IN (1, 3, 5, 1, 9)) --значения из данного списка
CHECK (VALUE LIKE '%ОB%') --значения в которых присутствует «ОВ»
Если домен определяет строковый тип данных (char или varchar), то для него можно указать предложение COLLATE, в котором задается порядок сортировки.
Вместо элемента <тип данных> должно быть использовано название одного из типов данных Firebird (Таблица 1).
Имя домена должно быть уникальным среди имен доменов базы данных. Несколько упрощенный синтаксис для типа данных:
<тип данных> ::=
{SMALLINT | INTEGER | BIGINT | FLOAT | DOUBLE PRECISION | BOOLEAN}
| {DATE | TIME | TIMESTAMP}
| {DECIMAL | NUMERIC} [(<n> [,<m>])]
| {CHAR | VARCHAR} [(<n>)] [CHARACTER SET <набор символов>]
| BLOB [SUB_TYPE <n>] [SEGMENT SIZE <n>] [CHARACTER SET <набор СИМВОЛОВ>]
Фрагмент сценария создания доменов:
/***************************************************
Домены
***************************************************/
CREATE DOMAIN ID INTEGER NOT NULL; -- идентификатор
CREATE DOMAIN Name VARCHAR(30) NOT NULL; -- имя
CREATE DOMAIN CurrentDate DATE DEFAULT 'TODAY' NOT NULL;
CREATE DOMAIN Percent INTEGER CHECK (VALUE >= 0 AND VALUE <= 100); -- процент
CREATE DOMAIN MEMO BLOB SUB_TYPE TEXT SEGMENT SIZE 128; -- текст без ограничения длины
Оператор изменения домена ALTER DOMAIN позволяет изменить тип данных, имя домена, а также добавить или удалить условие контроля данных. Чтобы изменить домен можно также внести изменения в системные таблицы.
Его синтаксис:
ALTER DOMAIN {<имя> | <старое имя> ТО <новое имя>}
{ SET DEFAULT {<литерал> | NULL | USER}
| DROP DEFAULT
| ADD [CONSTRAINT] CHECK (<условие домена>)
| DROP CONSTRAINT
| TYPE <тип данных>};
Мы можем переименовать домен (конструкция <старое имя> то <новое имя>), установить новое значение по умолчанию (предложение set default), удалить значение по умолчанию (drop default), задать новое условие проверки вводимых данных (add [constraint] check), удалить существующее условие проверки (drop constraint) и даже изменить тип данных (предложение type).
Нельзя только удалить условие not null.
SET SQL DIALECT 3;
SET NAMES WIN1251;
CONNECT 'D:\BestDatabase\work.fdb'
USER 'wizard' PASSWORD 'master';
ALTER DOMAIN COUNTRYCOD
DROP CONSTRAINT;
ALTER DOMAIN COUNTRYCOD
ADD CONSTRAINT CHECK (VALUE BETWEEN 'AAA' AND 'ЯЯЯ');
COMMIT;
Синтаксис оператора удаления домена:
DROP DOMAIN Имя_Домена;
DROP DOMAIN COUNTRYCOD;
DROP DOMAIN COUNTRYNAME;