ВУЗ: Томский государственный университет систем управления и радиоэлектроники
Категория: Методичка
Дисциплина: Базы данных
Добавлен: 28.11.2018
Просмотров: 4819
Скачиваний: 8
36
Предложение CONSTRAINT используется в инструкциях ALTER
TABLE и CREATE TABLE для создания или удаления индексов (индексы —
это специальные объекты в БД, создаваемые с целью повышения быстро
действия выполнения запросов, оптимизации хранения и доступа к дан-
ным). Существуют два типа предложений CONSTRAINT: для создания
простого индекса — по одному полю и для создания составного индекса —
по нескольким полям «Синтаксис»:
простой индекс:
CONSTRAINT имя {PRIMARY KEY | UNIQUE | NOT NULL]
[ON UPDATE {CASCADE | SET NULL}]
[ON DELETE {CASCADE | SET NULL}]}
составной индекс:
CONSTRAINT имя
{PRIMARY KEY (ключевое_1[, ключевое_2 [, ...]]) |
UNIQUE (уникальное_1[, уникальное_2 [, ...]]) |
NOT NULL (непустое_1[, непустое_2 [, ...]]) |
FOREIGN KEY (ссылка_1[, ссылка_2 [, ...]])
REFERENCES внешняя Таблица [(внешнее Поле_1 [, внешнее По-
ле_2 [, ...]])]
[ON UPDATE {CASCADE | SET NULL}]
[ON DELETE {CASCADE | SET NULL}]},
где имя — имя индекса, который следует создать;
ключевое_1, ключевое_2 — имена одного или нескольких полей, ко-
торые следует назначить ключевыми;
уникальное_1, уникальное_2 — имена одного или нескольких полей,
которые следует включить в уникальный индекс;
непустое_1, непустое_2 — имена одного или нескольких полей, в ко-
торых запрещаются значения Null;
37
ссылка_1, ссылка_2 — имена одного или нескольких полей, вклю-
ченных во внешний ключ, которые содержат ссылки на поля в другой таб-
лице;
внешняя Таблица — имя внешней таблицы, которая содержит поля,
указанные с помощью аргумента внешнееПоле;
внешнее Поле_1, внешнее Поле_2 — имена одного или нескольких
полей во внешней Таблице, на которые ссылаются поля, указанные с по-
мощью аргумента ссылка_1, ссылка_2. Это предложение можно опустить,
если данное поле является ключом внешней Таблицы.
ON UPDATE, ON DELETE обеспечивают автоматическое указание
каскадного обновления связанных полей и каскадного удаления связанных
записей в схеме БД (CASCADE) или обнуление соответствующих значе-
ний полей, являющихся внешними ключами (SET NULL). Данные ключе-
вые слова актуальны, если в СУБД MS Access включить поддержку ANSI
SQL, в противном случае в результате выполнения запроса будет выдана
ошибка синтаксиса.
Предложение CONSTRAINT позволяет создать для поля индекс од-
ного из двух описанных ниже типов:
1) уникальный индекс, использующий для создания зарезервирован-
ное слово UNIQUE. Это означает, что в таблице не может быть двух запи-
сей, имеющих одно и то же значение в этом поле. Уникальный индекс соз-
дается для любого поля или любой группы полей. Если в таблице опреде-
лен составной уникальный индекс, то комбинация значений включенных
в него полей должна быть уникальной для каждой записи таблицы, хотя
отдельные поля и могут иметь совпадающие значения;
2) ключ таблицы, состоящий из одного или нескольких полей, ис-
пользующий зарезервированные слова PRIMARY KEY. Все значения клю-
ча таблицы должны быть уникальными и не значениями Null. Кроме того,
в таблице может быть только один ключ.
38
Для создания внешнего ключа можно использовать зарезервирован-
ную конструкцию FOREIGN KEY. Если ключ внешней таблицы состоит из
нескольких полей, необходимо использовать предложение CONSTRAINT.
При этом следует перечислить все поля, содержащие ссылки на поля во
внешней таблице, а также указать имя внешней таблицы и имена полей
внешней таблицы, на которые ссылаются поля, перечисленные выше, при-
чем в том же порядке. Однако если последние поля являются ключом
внешней таблицы, то указывать их необязательно, поскольку ядро базы
данных считает, что в качестве этих полей следует использовать поля, со-
ставляющие ключ внешней таблицы.
В
следующем
примере
создается
таблица
«Задолжен-
ность_за_обучение» с внешним ключом «Код_студента», связанным с по-
лем «Код_студента», в таблице «Студент»:
CREATE TABLE Задолженность_за_обучение
(Код_задолженности AUTOINCREMENT PRIMARY KEY,
Код_студента INTEGER, Сумма_задолженности MONEY,
CONSTRAINT f1_i FOREIGN KEY (Код_студента)
REFERENCES Студент (Код_студента)
ON UPDATE CASCADE ON DELETE CASCADE);
Внешний вид схемы БД, состоящей из таблиц «Студент» и «Задол-
женность_за_обучение», представлен на рисунке 12. Здесь необходимо от-
метить, что дополнительные ключевые слова ON UPDATE CASCADE ON
DELETE CASCADE позволили обеспечить автоматическое указание кас-
кадного обновления связанных полей и каскадного удаления связанных за-
писей в схеме БД.
39
Рис. 12 — Схема данных после создания таблицы
«Задолженность_за_обучение»
Создание индекса с помощью инструкции CREATE INDEX
CREATE INDEX создает новый индекс для существующей таблицы.
Синтаксис команды:
CREATE [UNIQUE] INDEX индекс
ON таблица (поле [ASC|DESC][, поле [ASC|DESC], ...])
[WITH { PRIMARY | DISALLOW NULL | IGNORE NULL }]
где индекс — имя создаваемого индекса;
таблица — имя существующей таблицы, для которой создается ин-
декс;
поле — имена одного или нескольких полей, включаемых в индекс.
Для создания простого индекса, состоящего из одного поля, вводится
имя поля в круглых скобках сразу после имени таблицы. Для создания со-
ставного индекса, состоящего из нескольких полей, перечисляются имена
всех этих полей. Для расположения элементов индекса в убывающем по-
рядке используется зарезервированное слово DESC; в противном случае
будет принят порядок по возрастанию.
40
Чтобы запретить совпадение значений индексированных полей в раз-
ных записях, используется зарезервированное слово UNIQUE. Необязатель-
ное предложение WITH позволяет задать условия назначения. Например:
–
с помощью параметра DISALLOW NULL можно запретить значе-
ния Null в индексированных полях новых записей;
–
параметр IGNORE NULL позволяет запретить включение в индекс
записей, имеющих значения Null в индексированных полях;
–
зарезервированное слово PRIMARY позволяет назначить индекси-
рованные поля ключом. Такой индекс по умолчанию является уникальным,
следовательно, зарезервированное слово UNIQUE можно опустить.
В следующем примере создается уникальный индекс, не допускаю-
щий ввод повторяющихся значений в поле «Номер зачетной книжки»
в таблице «Студент»:
CREATE UNIQUE INDEX New_index ON
Студент (Номер_зачетной_книжки) WITH IGNORE NULL;
Ключевые слова IGNORE NULL позволяют добавлять в таблицу записи
по студентам без обязательного ввода номера зачетной книжки (рис. 13).
Рис. 13 — Результат создания уникального индекса