Delphi 3 и создание приложений баз данных


36.2.1. Ограничения значения столбца записи


Ограничение первичного ключа

Задает требование уникальности значения поля (столбца) или группы полей (столбцов), входящих в первичный ключ, по отношению к другим записям таблицы Например,

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,




Начало  Назад  Вперед



Книжный магазин