Создание ключей в базовых отношениях автоматически связано с созданием индексов.
Дадим определение понятия индекса.
Индекс – это системная структура данных, в
которой размещается обязательно упорядоченный перечень значений
какого-либо ключа со ссылками на те кортежи отношения, в которых эти
значения встречаются.
Индексы в системах управления базами данных бывают двух видов:
1) простые.
Простой индекс берется для подсхемы схемы базового отношения из одного атрибута;
2) составные.
Соответственно составной индекс – это индекс для подсхемы, состоящей из нескольких атрибутов.
Но, кроме деления на простые и составные индексы, в
системах управления базами данных существует деление индексов на
уникальные и неуникальные. Итак:
1) уникальные индексы – это индексы, ссылающиеся не более чем на один атрибут.
Уникальные индексы, как правило, соответствуют первичному ключу отношения;
2) неуникальные индексы – это индексы, могущие соответствовать нескольким атрибутам одновременно.
Неуникальные ключи, в свою очередь, чаще всего соответствуют внешним ключам отношения.
Рассмотрим пример, иллюстрирующий деление индексов на
уникальные и неуникальные, т. е. рассмотрим следующие отношения,
заданные таблицами: Здесь
соответственно Primary key – первичный ключ отношения, Foreign key –
внешний ключ. Понятно, что в этих отношениях, индекс атрибута Primary
key – уникальный, так как он соответствует первичному ключу, т. е.
одному атрибуту, а индекс атрибута Foreign key – неуникальный, ведь он
соответствует ключам внешним. И его значение «20» соответствует
одновременно первой и третьей строкам таблицы-отношения.
Но иногда индексы могут создаваться без отношения к
ключам. Это делается в системах управления базами данных для поддержки
производительности операций сортировки и поиска.
Например, дихотомический поиск значения индекса в
кортежах будет реализован в системах управления базами данных за
двадцать итераций. Откуда получены эти сведения? Они были получены путем
несложных вычислений, т. е. следующим образом: Создаются индексы в системах управления
базами данных при помощи уже известного нам оператора Create, но только с
добавлением ключевого слова index. Выглядит такой оператор следующим
образом:
Create index имя индекса
On имя базового отношения (имя атрибута,..);
Здесь мы видим знакомый нам
металингвистический символ «,..», обозначающий возможность повтора
аргумента через запятую, т. е. в этом операторе может быть создан
индекс, соответствующий нескольким атрибутам.
Если требуется объявить уникальный индекс, перед словом
index добавляют ключевое слово unique, и тогда весь оператор создания в
базовом отношении индекса принимает следующий вид:
Create unique index имя индекса
On имя базового отношения (имя атрибута);
Тогда в самом общем виде, если вспомнить
правило обозначения необязательных элементов (металингвистический символ
[]), оператор создания индекса в базовом отношении будет выглядеть
следующим образом:
Create [unique] index имя индекса
On имя базового отношения (имя атрибута,..);
Если требуется удалить из базового отношения уже имеющийся индекс, используют оператор Drop, также уже известный нам:
Drop index {имя базового отношения. Имя индекса},.. ;
Почему здесь используется уточненное имя индекса «имя базового отношения. Имя индекса»?
В операторе удаления индекса всегда используется его уточненное имя,
потому что имя индекса должно быть уникальным в пределах одного
отношения, но не больше.
|