Учись программированию на C++ Builder бесплатно!

В БД InterBase не обязательно задавать ограничения столбца, но позволяют автоматизировать процесс ввода значений, управлять порядком сортировки строк, а также предотвращать ошибки ввода.

Формат ограничения столбца

[DEFAULT {<3начение> | NULL | USER}]
[NOT NULL]
[COLLATE <Порядок сортировки»]
[CHECK <Условия>]

Операнд DEFAULT

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

В качестве значения по умолчанию можно указать:

  • константу (литерал) – в столбец заносится указанное значение (тип значения должен соответствовать типу столбца);
  • NULL – в столбец заносится нулевое значение;
  • USER – в столбец заносится имя текущего пользователя (для столбцов строковых типов).

Операнд NOT NULL

Операнд запрещает создавать пустой столбец, т.е. новый столбец должен содержать значение указанного типа и диапазона.

При программировании операторов нельзя допускать взаимоисключающие конструкции, например, одновременно указывать операнды DEFAULT NULL и NOT NULL.

Операнд COLLATE

Операнд определяет порядок сортировки строковых значений.

Операнд CHECK

Операнд позволяет установить для столбца разнообразные условия, которые управляют его значениями. При редактировании записей столбцу разрешается присваивать только те значения, которые удовлетворяют заданным условиям. Эти условия могут быть как простым сравнением, так и сложной комбинацией нескольких критериев.

Формат операнда CHECK

CHECK
{<Выражение> <Операция сравнения > {<Выражение> | (<Отбор1>)}
| <Выражение> [NOT] <Мин. значение> AND <Макс. значение>
| <Выражение> [NOT] LIKE <Выражение1> [ESCAPE <Выражение2>]
| <Выражение> [NOT] IN (<Выражение1> [, <Выражение2>] ... [, <ВыражениеN>] | (<ОтборМ>))
| <Выражение> IS [NOT] NULL
| <Выражение> [NOT] {<Операция сравнения>|ALL|SOME|ANY} (<ОтборМ>)
| EXISTS (<ОтборМ>)
| SINGULAR (<ОтборМ>)
| <Выражение> [NOT] CONTAINING <Выражение1>
| <Выражение> [NOT] STARTING [WITH] <Выражение1>}

При задании различных условий в операнде CHECK разрешается использовать оператор SELECT. Как и в операторе SELECT, условия в операнде CHECK можно объединять (комбинировать) с помощью логических операций NOT, OR и AND.

Тип выражения должно соответствовать типу столбца (например, числовой или строковый). В выражении можно использовать операнды, круглые скобки, знаки операций (операторы) и функции. Операндами могут быть значения и имена столбцов. Состав функций (SUM, MAX, MIN, UPPER и др.) практически не отличается от состава функций, включенных в локальную версию языка SQL.

Функция GEN_ID возвращает уникальное значение генератора и служит для установки значений ключа. В основном выражение представляет собой имя столбца или значение.

Элементы, обозначенные как отбор, представляют собой совокупность значений, отобранных с помощью оператора SELECT. Условие отбора записей, заданное в этом операторе, для элемента Отбор1 должно возвращать одно значение или ни одного, а для элемента ОтборМ - несколько значений или ни одного. Оператор SELECT составляется по обычным правилам и служит для отбора записей из различных таблиц.

Чтобы задать диапазон ограничений для значений столбца, используется операция сравнения или конструкция, которая имеет следующий вид:

BETWEEN <Минимальное значение> AND <Максимальное значение>

Пример №1

CREATE TABLE CuBook
(Title VARCHAR(20) NOT NULL,
Id FLOAT CHECK (Id > 0),
Number INTEGER CHECK (Number BETWEEN 1 AND 100));

Для таблицы CuBook значение столбца Title не может быть пустым, значение столбца Id должно быть положительным, а значение столбца Number находиться в диапазоне от 1 до 100.

С помощью условия можно обеспечить для столбца установку одного из значений, содержащихся в определенном наборе (списке). Набор значений бывает фиксированным (статическим) и задается непосредственно в конструкции IN или формируется динамически с помощью оператора SELECT. В последнем случае состав набора зависит от результата работы оператора SELECT, который выполняется каждый раз при модификации записей таблицы.

Пример №2

CREATE TABLE CuBook2
(Title VARCHAR (20),
Profile VARCHAR(20)
CHECK (Post IN ("Программист", "Язык программирования", "Стаж")),
Dossier VARCHAR(20)
CHECK (Dossier IN (SELECT Dossier From Pages)));

Для полей таблицы CuBook2 устанавливает список возможных значений: значение поля Profile должно входить в фиксированный набор из трех строковых констант. Недостатком подобного ограничения является то, что оно действует на уровне таблицы и в приложении не может быть изменено или отменено. Поэтому фиксированный набор задается для столбцов, вводимые значения которых известны и не будут часто изменяться. В остальных случаях удобнее определять возможные значения динамически, как это сделано для поля Dossier: набор допустимых величин для этого поля образуется совокупностью всех значений поля таблицы Pages. При необходимости можно сформировать набор значений на основании записей, удовлетворяющих определенным условиям.

Например, если требуются атрибуты должностей, которым соответствует оклад, превышающий 25000 рублей, то описание поля Dossier будет иметь следующий вид:

Dossier VARCHAR (20)
CHECK (Dossier IN (SELECT Dossier From Pages WHERE Salary > 25000)));

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

Формат операнда CHECK (на уровне таблицы)

[CONSTRAINT <Имя ограничения >]
CHECK <Условия>

Есть ограничения на значения столбцов, как и другие ограничения. Имя может быть задано при определении ограничения в операнде CONSTRAINT, но это не является обязательным: если для ограничения столбца имя не задано, то это ограничение получает имя по умолчанию.

Добавление ограничения к уже существующей таблице

ALTER TABLE <Имя таблицы>
ADD CHECK ([CONSTRAINT <Имя ограничения>] <Условия>);

Удаление ограничения

ALTER TABLE <Имя таблицы> DROP <Имя ограничения>;

Поиск по сайту