558_____________________________________________Глава 10

только такие значения, которые содержатся в некотором поле другой таблицы. В
нашем примере, очевидно, при создании таблицы Pers желательно обеспечить, что-
бы в значение ее поля Dep невозможно было ввести подразделение, отсутствующее
в таблице Dep. Это можно сделать следующими операторами:

/* Создание таблицы Dep */
create table Dep(

Dep char(15) Not Null Primary Key,

Proisv char(1)
) ;

/* Создание таблицы Pers */
create table Pers(

Mum smallint Not Null Primary Key,

Dep char(15) DEFAULT "Неизвестный",

Fam char(20) Not Null,

Nam char(20) Not Null,

Par char(20) Not Null,

FOREIGN KEY (Dep) REFERENCES Dep
ON DELETE SET DEFAULT ON UPDATE CASCADE,

CONSTRAINT Dep CHECK(EXISTS(

SELECT Dep FROM Dep WHERE Pers.Dep = Dep.Dep))
) ;

После ключевого слова CONSTRAINT следует имя поля Dep данной таблицы,
а затем записано условие проверки допустимости значения данного поля. В приве-
денном примере это условие сводится к тому, что значение поля Dep таблицы Pers
должно встречаться среди значений поля Dep таблицы Dep.

Мы рассмотрели основные формы оператора создания таблицы. Удаление таб-
лицы осуществляется оператором Drop Table:

DROP TABLE <имя таблицы>

Надо учесть, что удаление таблицы в корне отличается от удаления в ней всех
записей. При удалении даже всех записей сама таблица (ее структура) остается, а
оператор Drop Table полностью уничтожает таблицу.

Модификация структуры существующей таблицы осуществляется оператором
Alter Table:

ALTER TABLE <имя таблицы> <действие> <имя поля> <тип данных> .. .

В этом операторе <действие> может принимать значения ADD — добавить но-
вое поле, или DROP — удалить существующее поле. Если поле добавляется, то для
него надо указывать <тип данных>. Если поле удаляется, то тип данных не указы-
вается. Приведем пример оператора модификации структуры:

ALTER TABLE Pers DROP Year_b, ADD Age integer

10.1.5 Операции с индексами

Индексы существенно ускоряют процесс поиска и упорядочивания записей
таблицы. Если в операторе Select содержится элемент упорядочивания ORDER
BY, то если перечисляемые поля совпадают с определенными в индексе — упоря-
дочивание будет использовать этот индекс и произойдет с малыми затратами вре-
мени. В противном случае индекс использоваться не будет и упорядочивание по-
требует большего времени. Индекс будет использоваться и в том случае, если в
ORDER BY перечислены не все поля индекса, а какие-то первые из них. Напри-
мер, если создан индекс по полям р1, р2, рЗ, то при выполнении запроса

Select ... ORDER BY pl,p2