Домени (domains)

Домен - це опис безлічі допустимих значень поля таблиці. Опис домену показує тип даних (наприклад, число або рядок), довжину даних та інші обмеження (наприклад, вимога, щоб перший символ був буквою або щоб значення не перевищувало заданого числа). В Firebird домени використовуються тільки в операторах створення і зміни структури таблиць.

Для створення доменів використовується команда CREATE DOMAIN. для зміни - ALTER DOMAIN. а для видалення - DROP DOMAIN.

Нижче наведено спрощений синтаксис оператора створення домену.

CREATE DOMAIN ім'я_домена [AS] <тип данных>

[DEFAULT літерал | NULL | USER>]

[COLLATE <порядок сортировки>];

При описі синтаксису операторів квадратні дужки позначають необов'язковий елемент, фігурні дужки об'єднують групу елементів оператора в один, символ | означає вибір однієї з кількох альтернатив. Елемент, розташований в кутових дужках повинен пояснюватися окремо.

У наведеному прикладі необов'язковий елемент

[DEFAULT Literal | NULL | USER>]

дозволяє задати значення стовпця за замовчуванням з використанням однієї з трьох можливостей. Перша можливість, позначена як Literal, дозволяє задавати значення за замовчуванням у вигляді текстових констант, чисел і дат. Друга можливість - вказати у визначенні стовпця DEFAULT NULL. що призведе до того, що у новостворених записах значення цього стовпця буде NULL. Третій спосіб - вказати при визначенні стовпця DEFAULT USER. Якщо в цьому випадку в таблицю буде вставлена ​​рядок без вказівки значення цього поля, то в нього буде занесено ім'я поточного користувача

Якщо необхідно, щоб поле мало якесь непорожнє значення, до опису домену вносять NOT NULL.

Необов'язковий елемент CHECK в описі домену дозволяє змусити сервер перевіряти заносяться в базу даних значення на виконання заданої умови.

Синтаксис умови домену в реченні CHECK:

VALUE <оператор> <значение>

| VALUE [NOT] BETWEEN <значение> AND <значение>

| VALUE [NOT] LIKE <значение>

| VALUE IS [NOT] NULL

| VALUE [NOT] CONTAINING <значение>

| VALUE [NOT] STARTING [WITH] <значение>

| NOT <условие домена>

| <условие домена> OR <условие домена>

| <условие домена> AND <условие домена>

Ключове слово VALUE заміщає значення, що привласнюється одну, заснований-ному на цьому домені.

CHECK ((VALUE = "0") OR (VALUE = '1') OR (VALUE IS NULL))

Якщо домен визначає строковий тип даних (char або varchar), то для нього можна вказати пропозицію COLLATE. в якому задається порядок сортування.

замість елемента <тип данных> має бути використано назву одного з типів даних Firebird (Таблиця 1).

Ім'я домену має бути унікальним серед імен доменів бази даних. Кілька спрощений синтаксис для типу даних:

| [()] [CHARACTER SET <набор символов>]

| BLOB [SUB_TYPE ] [SEGMENT SIZE ] [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 дозволяє змінити тип даних, ім'я домену, а також додати або видалити умова контролю даних. Щоб змінити домен можна також внести зміни в системні таблиці.

| ADD [CONSTRAINT] CHECK ( <условие домена>)

Ми можемо перейменувати домен (конструкція <старое имя> то <новое имя>), Встановити нове значення за замовчуванням (пропозиція set default), видалити значення за замовчуванням (drop default), задати нову умову перевірки введених даних (add [constraint] check), видалити існуюче умова перевірки (drop constraint) і навіть змінити тип даних (пропозиція type).

Не можна тільки видалити умова not null.

SET SQL DIALECT 3;

SET NAMES WIN1251;

USER 'wizard' PASSWORD 'master';

ALTER DOMAIN COUNTRYCOD

ALTER DOMAIN COUNTRYCOD

ADD CONSTRAINT CHECK (VALUE BETWEEN 'AAA' AND 'ЯЯЯ');

Синтаксис оператора видалення домену:

DROP DOMAIN ім'я_домена;

DROP DOMAIN COUNTRYCOD;

DROP DOMAIN COUNTRYNAME;