Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные работы БД.doc
Скачиваний:
155
Добавлен:
18.05.2015
Размер:
5.33 Mб
Скачать

Домены (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;