Ограничения значения столбца записи
Ограничение первичного ключа
Задает требование уникальности значения поля (столбца) или группы полей (столбцов), входящих в первичный ключ, по отношению к другим записям таблицы Например,
CREATE TABLE SAL_HIST (QUORTER INTEGER NOT NULL, PRIMARY KEY (QUORTER));
Ограничение уникального ключа
Задает требование уникальности значения поля (столбца) или группы полей (столбцов), входящих в уникальный ключ, по отношению к другим записям таблицы. Например,
CREATE TABLE VLADLIM (... NAZVVLAD VARCHAR(50) NOT NULL, UNIQUE (NAZVVLAD) );
Ограничение ссылочной целостности
Задает требование, согласно которому для каждой записи в дочерней таблице должны иметься записи в родительской таблице. При этом изменение значения столбца связи в записи родителя при наличии дочерних записей блокируется, равно как и удаление родительской записи (запрет каскадных изменений и удалений). Для разрешения каскадных воздействий следует отменить ограничение ссылочной целостности и реализовать каскадные воздействия по отношению к дочерним записям (изменение поля связи, удаление) в триггерах. Например,
CREATE TABLE SPR_TOVAR(
TOVAR VARCHAR(20) NOT NULL COLLATE PXW_CYRL, ........ PRIMARY KEY(TOVAR));
CREATE TABLE PRIHOD(
ID_PRIHOD INTEGER NOT NULL PRIMARY KEY,
.............
TOVAR VARCHAR(20) NOT NULL COLLATE PXW_CYRL,
FOREIGN KEY(TOVAR) REFERENCES SPR_TOVAR);
Ограничение требуемого значения
Определяет, что в поле не может хранится пустое значение (NULL). Например,
CREATE TABLE TOVAR {............ OSTATOK INTEGER NOT NULL, ................. };
Значения по умолчанию
Столбцу может быть присвоено значение по умолчанию. Это значение будет актуально в том случае, если пользователь не введет в столбец никакого иного значения. Например,
CREATE TABLE SAL_HIST (QUORTER INTEGER DEFAULT 1 , .......);
Требование соответствия одному значению из списка
К столбцу может быть предъявлено ограничение, согласно которому значение столбца должно содержать одну из величин, объявленных в списке, и никакое другое. Например,
CREATE DOMAIN POL_TYPE AS CHAR(3) CHECK(VALUE IN ("Муж","Жен")) ;
Ограничение диапазона возможных значений
Такое требование определяет, что значение поля должно ограничиваться указанным диапазоном. Например,
CREATE TABLE TBL(CHECK(STOLBEZ BETWEEN 100 AND 200); ) ;
Ограничение максимума или минимума
Указывает, что поле должно превышать какое-либо значение (минимум) и/ или не превышать какое-либо значение (максимум). В приводимом ниже примере для столбца STOLBEZ в качестве минимального значения указано 100.
CREATE TABLE TBL(CHECK(STOLBEZ >= 100); );
Алгоритм вычисления значений
Для столбца, чье значение вычисляется по значениям других столбцов, может быть установлен алгоритм вычисления значения. Например,
CREATE TABLE SAL_HIST (LAST_YEAR INTEGER, THIS_YEAR INTEGER,
GROWTH COMPUTED BY ( THIS_YEAR - LAST_YEAR), ...);
Ограничение отношения между полями (столбцами) записи
Такое ограничение определяет некоторое отношение (больше, меньше, равно и т.д.) между значениями двух полей одной и той же записи. Например,
CREATE TABLE PERSON_PARAMS(
HEIGHT INTEGER NOT NULL, WIEGHT INTEGER NOT NULL CHECK(HEIGHT > WIEGHT));
Ограничение формата значения
Указывает, что в значение столбца должна входить группа символов. В приводимом ниже примере значение поля STOLBEZ должно оканчиваться символами 'USD', независимо от того, какие символы и сколько расположены перед ними.
CREATE TABLE TBL (... CHECK (STOLBEZ LIKE "%USD") ; ...);
Требование вхождения символов в значение
Устанавливает, что в значение столбца должна входить группа символов (с неопределенной позиции). В приводимом ниже примере значение поля STOLBEZ должно содержать вхождение символов 'USD', независимо от того, какие символы и сколько расположены перед ними и после них.
CREATE TABLE TBL( ... CHECK (STOLBEZ CONTAINING "USD") ; ... );
Требования присутствия ведущих символов
Устанавливает, что значение столбца должно начинаться с определенной группы символов. В приводимом ниже примере значение поля STOLBEZ должно начинаться с символов 'USD'.
CREATE TABLE TBL( ... CHECK (STOLBEZ STARTING WITH "USD") ; ... );
Требование отношения со значением в другой таблице
Устанавливает, что значение столбца находится в некотором отношении (=, >, < и т.д.) со значением, получаемым путем выполнения запроса к другой таблице. В приводимом ниже примере значение в столбце KOLVO таблицы RASHOD не должно превышать значения столбца OSTATOK из записи таблицы TOVAR, причем поле TOVAR у обеих сравниваемых записей должно иметь одинаковое значение.
CREATE TABLE RASHOD (
ID_RS INTEGER NOT NULL,
TOVAR VARCHAR(20) CHARACTER SET WIN1251 NOT NULL,
COLLATE PXW_CYRL,
KOLVO_R INTEGER NOT NULL,
...
CONSTRAINT PO_OSTATKU
CHECK(KOLVO_R <= (SELECT TOVAR.OSTATOK
FROM TOVAR WHERE TOVAR.TOVAR = RASHOD.TOVAR) )
);
Требование отношения значения столбца со всеми или некоторыми значениями в другой таблице
Устанавливает, что значение столбца находится в отношении (=, >, < и т.д.) со значением столбца всех (ALL) или некоторых (SOME) записей, получаемых путем выполнения запроса к другой таблице.
В приводимом ниже примере значение столбца DATE_RASH (таблица RASHOD) должно быть больше значений всех полей DATE_PRIH в таблице PRIHOD. При этом сравниваемые записи с PRIHOD и RASHOD должны иметь одинаковое значение столбца TOVAR.
CREATE TABLE RASHOD (ID_RS INTEGER NOT NULL,
TOVAR VARCHAR(20) CHARACTER SET WIN1251 NOT NULL,
COLLATE PXW_CYRL,
DATE_RASH DATE NOT NULL,
...
CONSTRAINT RASH_TOVAR
FOREIGN KEY (TOVAR) REFERENCES TOVAR(TOVAR),
CONSTRAINT PO_DATE_RASH
CHECK ( DATE_RASH > ALL
(SELECT DATE_PRIH FROM PRIHOD WHERE PRIHOD.TOVAR = RASHOD.TOVAR) ) ) ;
Требование существования хотя бы одной записи в другой таблице
Устанавливает, что в другой таблице должна существовать хотя бы одна запись, удовлетворяющая некоторому условию.
В приводимом ниже примере обязательно существование хотя бы одной записи в таблице PRIHOD с таким же значением столбца TOVAR, что и в поле TOVAR записи таблицы RASHOD.
CREATE TABLE RASHOD (ID_RS INTEGER NOT NULL,
TOVAR VARCHAR(20) CHARACTER SET WIN1251 NOT NULL
COLLATE PXW_CYRL,
DATE_RASH DATE NOT NULL,
...
CONSTRAINT RASH_TOVAR
FOREIGN KEY (TOVAR) REFERENCES TOVAR(TOVAR),
CONSTRAINT PO_DATE_RASH
CHECK (EXISTS (SELECT TOVAR FROM PRIHOD WHERE PRIHOD.TOVAR = RASHOD.TOVAR)));
Требование существования единственной записи в другой таблице
Устанавливает, что в другой таблице должна существовать только одна запись, удовлетворяющая некоторому условию
В приводимом ниже примере обязательно существование единственной записи в таблице PRIHOD с таким же значением столбца TOVAR, что и в столбце TOVAR записи таблицы RASHOD
CREATE TABLE RASHOD (ID_RS INTEGER NOT NULL,
TOVAR VARCHAR(20) CHARACTER SET WIN1251 NOT NULL
COLLATE PXW_CYRL,
DATE_RASH DATE NOT NULL,