Название: Базы данных. Концепция баз данных, реляционная модель данных, языки SQL и XML (Токмаков Г. П.)

Жанр: Информационные системы и технологии

Просмотров: 1420


3.2.создание доменов

 

Если в таблице базы данных или в нескольких таблицах присутствуют столбцы, обладающие одними и теми же характеристиками, можно предвари- тельно описать тип такого столбца и его поведение с помощью домена, а затем поставить в соответствие каждому из одинаковых столбцов имя домена.

 

3.2.1. О БЩИЙ  ФОРМАТ  ОПЕРАТОРА  CREATE  DOMAIN

 

Домен определяется оператором CREATE DOMAIN, имеющий следующий формат

 

CREATE DOMAIN домен [AS] <тип данных> [DEFAULT {литерал | NULL | USER}]

[NOT NULL]

[COLLATE collation];

[CHECK (<огранич_домена>)]

 

Предложение DEFAULT определяет выражение, которое по умолчанию зано- сится в колонку, ассоциированную с доменом, при создании записи таблицы. Это значение будет присутствовать в соответствующем столбце записи до тех пор, пока пользователь не изменит его каким-либо образом. Значения по умол- чанию могут быть выражены как литерал-значение (числовое, строковое или дата), NULL − специфицирует пустое значение или USER − имя текущего пользо- вателя.

Предложение NOT NULL указывает, что столбцы, ассоциированные с доме-

ном, обязательно должны содержать какое-либо значение, отличное от пустого.

Предложение COLLATE задает порядок сортировки символов.

 

3.2.2. О ГРАН И Ч ЕНИЯ НА ЗНАЧЕ НИЯ СТОЛ Б Ц ОВ , А ССОЦ ИИР ОВАН НЫ Х С ДОМЕНОМ

Предложение CHECK определяет требования к значениям каждого столбца, ассоциированного с доменом. Столбцу не могут быть присвоены значения, не удовлетворяющие ограничениям, наложенным в предложении CHECK. Формат ограничения, накладываемого на значения полей, ассоциированных с доменом:

 

<огранич_домена> = {

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

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

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

VALUE [NOT] IN < значение1> [, <значение2> ...] |

VALUE IS [NOT] NULL |

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

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

NOT (<ограничение домена>) |

(<ограничение домена>) OR (<ограничение домена>) |

(<ограничение домена>) AND (<ограничение домена>)}

 

– <оператор> = { = | < | > | <= | >= | !< | !> | <> | != };

– ключевое слово VALUE означает все правильные значения, которые могут быть присвоены столбцу, ассоциированному с доменом.

– <оператор> <значение> − значение домена находится с параметром <зна‐

чение> во взаимоотношениях, определяемых параметром оператор. Например,

 

CHECK (VALUE >= 100);

 

– BETWEEN <значение1> AND <значение2> − значение домена должно находиться в промежутке между значение1 и значение2, включая их.

– LIKE < значение> [ESCAPE <значение>] − значение домена должно

«походить» на параметр значение. При этом символ «\%» употребляется для указа- ния любого значения любой длины и символ подчеркивания «_» − для указания любого  единичного  символа.  Например,  LIKE «\%USD» −  вводимое  значение должно оканчиваться символами «USD» независимо от того, какие символы и сколько расположены перед ними; LIKE «    94» − вводимое значение может со- держать 4 символа, из которых первые два − любые и последние два − «94». ESCAPE <значение> используется, если в операторе LIKE служебные символы

«\%» или «_» должны использоваться в шаблоне подобия. В этом случае выбира-

ется некоторый символ, например, «!», после которого служебные символы те- ряют свой статус и входят в поисковую строку как обычные символы. Символ «!» указывается после слова ESCAPE. Например, CHECK LIKE «\%!\%» ESCAPE «!»); Согласно приведенному ограничению значения домена должны заканчиваться символом «\%».

– IN <значение1> [, <значение2> ...] − значение домена должно совпадать с одним из приведенных в списке параметров значениеN, например: CHECK (VALUE IN («Муж», «Жен»));

– CONTAINING <значение> − значение домена должно содержать вхожде- ние параметра значение, не важно, в каком месте. Например, в наименовании от- дела вхождение «041» может встретиться где угодно «00304107», «Отдел ‐

041002»:

 

CHECK (VALUE CONTAINING «041»);

 

– STARTING [WITH] <значение> − значение домена должно начинаться параметром значение. Например, название отдела должно начинаться с «041»:

 

CHECK (VALUE STARTING WITH «041»);

 

Может быть задана комбинация условий, которым должно соответствовать значение домена. В этом случае отдельные условия соединяются операторами AND или OR. Например:

 

CHECK (VALUE STARTING WITH «041» AND VALUE CONTAINING «‐12»)

 

Для большинства условий можно указать слово NOT, которое изменяет усло-

вие с точностью до наоборот: CHECK (VALUE NOT BETWEEN 1 AND 10);

 

3.2.3. И ЗМЕНЕ НИЕ  ОПР ЕДЕЛЕНИЯ  ДОМЕНА

 

Оператор ALTER DOMAIN, имеющий следующий формат

ALTER DOMAIN имя

{ [SET DEFAULT {литерал | NULL | USER}] | [DROP DEFAULT] |

[ADD [CONSTRAINT] CHECK (<ограничен_домена>)] [DROP CONSTRAINT]          };

 

позволяет   изменит   параметры   домена,   определенного   ранее   оператором CREATE DOMAIN. Однако нельзя изменить тип данных и определение NOT NULL. Следует помнить, что все сделанные изменения будут учтены для всех столб- цов, определенных с использованием данного домена (в том случае, если пара- метры домена не были переопределены при создании столбцов таблицы или впоследствии).

– SET DEFAULT устанавливает значения по умолчанию подобно тому, как это делается в операторе CREATE DOMAIN.

– DROP DEFAULT отменяет текущие значения по умолчанию.

– [ADD [CONSTRAINT] CHECK (<ограничен_домена>)] добавляет усло- вия, которым должны соответствовать значения столбца, ассоциированного с до- меном. При этом возможно определение условий, рассмотренных выше для пред- ложения CHECK оператора CREATE DOMAIN.

–  DROP CONSTRAINT – удаляет условия, определенные для домена в предложе-

нии CHECK оператора CREATE DOMAIN или предыдущих операторов ALTER DOMAIN.

Например, пусть определен домен ID_TYPE:

 

CREATE DOMAIN ID_TYPE AS INTEGER CHECK(VALUE >= 100);

 

и в дальнейшем использован при создании таблицы AAA:

 

CREATE TABLE AAA

( ID ID_TYPE NOT NULL, FIO VARCHAR(20), Primary KEY(ID) );

 

Изменить условие CHECK так, чтобы значение было больше или равно 100 и меньше или равно 500, можно за два шага:

– сначала нужно удалить старое условие

 

ALTER DOMAIN ID_TYPE DROP CONSTRAINT;

 

– затем добавить новое (которое есть модифицированное старое)

 

ALTER DOMAIN ID_TYPE

CHECK(VALUE >= 100 AND VALUE <= 500);

 

Заметим, что изменять определение таблицы AAA нет необходимости, и от-

ныне столбец ID этой таблицы можно занести значения, большие или равные

100 и меньшие или равные 500.