Файл: Базы данных МУ КР ЛР.pdf

Добавлен: 28.11.2018

Просмотров: 4819

Скачиваний: 8

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

 

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; 


background image

 

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. Кроме того, 

в таблице может быть только один ключ. 


background image

 

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 позволили  обеспечить  автоматическое  указание  кас-

кадного обновления связанных полей и каскадного удаления связанных за-

писей в схеме БД. 


background image

 

39 

 

Рис. 12 — Схема данных после создания таблицы  

«Задолженность_за_обучение» 

 

Создание индекса с помощью инструкции CREATE INDEX 

CREATE INDEX создает новый индекс для существующей таблицы. 

Синтаксис команды: 

CREATE [UNIQUE] INDEX индекс 

ON таблица (поле [ASC|DESC][, поле [ASC|DESC], ...]) 

[WITH { PRIMARY | DISALLOW NULL | IGNORE NULL }] 

где     индекс — имя создаваемого индекса; 

таблица — имя  существующей  таблицы,  для  которой  создается  ин-

декс; 

поле — имена одного или нескольких полей, включаемых в индекс.  

Для создания простого индекса, состоящего из одного поля, вводится 

имя поля в круглых скобках сразу после имени таблицы. Для создания со-

ставного  индекса,  состоящего  из  нескольких  полей,  перечисляются  имена 

всех  этих  полей.  Для  расположения  элементов  индекса  в  убывающем  по-

рядке  используется  зарезервированное  слово DESC; в  противном  случае 

будет принят порядок по возрастанию. 


background image

 

40 

Чтобы запретить совпадение значений индексированных полей в раз-

ных  записях,  используется  зарезервированное  слово UNIQUE. Необязатель-

ное предложение WITH позволяет задать условия назначения. Например: 

 

с помощью параметра DISALLOW NULL можно запретить значе-

ния Null в индексированных полях новых записей; 

 

параметр IGNORE NULL позволяет запретить включение в индекс 

записей, имеющих значения Null в индексированных полях; 

 

зарезервированное слово PRIMARY позволяет назначить индекси-

рованные поля ключом. Такой индекс по умолчанию является уникальным, 

следовательно, зарезервированное слово UNIQUE можно опустить. 

В  следующем  примере  создается  уникальный  индекс,  не  допускаю-

щий  ввод  повторяющихся  значений  в  поле  «Номер  зачетной  книжки» 

в таблице «Студент»: 

CREATE UNIQUE INDEX New_index ON 

Студент (Номер_зачетной_книжки) WITH IGNORE NULL; 

Ключевые слова IGNORE NULL позволяют добавлять в таблицу записи 

по студентам без обязательного ввода номера зачетной книжки (рис. 13).  

 

 

Рис. 13 — Результат создания уникального индекса