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