Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Создание базы данных.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.72 Mб
Скачать

3.4. Создание первичных ключей и индексов

Одним из основных требований, предъявляемых к СУБД, является возможность быстрого поиска требуемых записей. В реляционных СУБД для реализации этого требования служат индексы. Индекс очень похож на алфавитный указатель в книге. Например, у вас в руках книга по Microsoft Visual FoxPro и вы хотите узнать о том, что написано в ней об индексах. Загляните в конец книги и найдите в предметном указателе слово «индекс». Так как указатель отсортирован по алфавиту, вы без труда найдете нужное слово и ссылки на страницы, где оно встречается в книге. Индекс работает с таблицей по такому же принципу. Он содержит отсортированные значения указанного поля таблицы и ссылки на номера записей таблицы, где эти значения находятся. При поиске записи система управления базами данных сначала просматривает индекс, что занимает совсем немного времени, так как для этого используется специальный алгоритм, находит ссылку на номер записи и по ней - нужную строчку в таблице. Таким образом, отпадает необходимость последовательного просмотра всех записей в таблице.

Индекс можно построить по полю почти любого типа. К счастью, пользователь не обязан знать, за счет чего достигается такое огромное увеличение скорости поиска. Достаточно создать индекс, а система Visual FoxPro позаботится обо всем остальном.

Посмотрим на конечный результат (рис. 1.8). На нем представлены индексы таблицы Flat. Их три: Flat Id (Primary), Account (Candidate) и Address (Regular).

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

Простой первичный ключ - это индекс, созданный по ключевому полю таблицы (Тип Visual FoxPro - Primary).

Составной первичный ключ - это индекс, созданный по ключевой связке полей таблицы (Тип Visual FoxPro также - Primary).

Первичный ключ у любой таблицы может быть только один. Этого требует теория нормализации. Кроме первичного ключа таблица может иметь любое количество обычных индексов (Тип Visual FoxPro - Regular). Среди них могут быть и уникальные, не допускающие повторяющихся значений. Их принято называть индексы-кандидаты на роль первичного ключа (Тип Visual FoxPro - Candidate). В нашем примере такой индекс есть. Загляните в таблицу Flat (рис. 2.4) и обратите внимание на поле Account (номер лицевого счета квартиросъемщика). Это поле однозначно определяет положение любой квартиры в таблице.

А теперь о создании ключей и обычных индексов с самого начала и по порядку.

Создание простого первичного ключа. Создадим простой первичный ключ для таблицы Street (улицы). Ключевое поле, однозначно определяющее положение любой улицы в таблице улиц, также носит название Street (рис. 2.1).

  1. Откройте таблицу Street в режиме конструктора. Для этого в окне базы данных Real Estate (рис. 2.1) щелкните по таблице Street правой кнопкой мыши. Появится меню. В нем пять пунктов. Выберите из них четвертый с названием Modify.

  2. Появится окно конструктора таблиц. Перейдите на вторую вкладку с названием Indexes (рис. 1.9). Увидите таблицу. В ней шесть колонок: Order, Name, Type, Expression, Filter и Collate.

  1. Во вторую колонку введите название индекса - street.

  1. Нажмите клавишу Tab для перехода в третью колонку Type.

  1. Откройте при помощи мыши поле со списком. В нем четыре значения: Primary, Candidate, Binary и Regular. Выберите первое - Primary.

  2. В четвертую колонку введите название поля, по которому создается индекс (первичный ключ в данном случае) - street. Остальные колонки заполнять не требуется.

  3. Щелкните мышью по кнопке OK. Visual FoxPro попросит подтвердить сделанные изменения. В появившемся окне выберите кнопку Yes.

Создание составного первичного ключа. Создадим составной первичный ключ для таблицы Owners (Проживающие). Связка ключевых полей, однозначно определяющая положение любой записи в этой таблице, выглядит так: Street+House+Flat+ Number.

  1. Откройте таблицу Owners в режиме конструктора. Для этого в окне базы данных Real Estate (рис. 2.1) щелкните по таблице Owners правой кнопкой мыши. Появится меню. В нем пять пунктов. Выберите из них четвертый с названием Modify.

  2. Появится окно конструктора таблиц. Перейдите на вторую вкладку с названием Indexes (рис. 1.10). Увидите таблицу. В ней шесть колонок: Order, Name, Type, Expression, Filter и Collate.

Рис. 1.10. Таблица Owners в конструкторе таблиц (вторая вкладка Indexes)

  1. Во вторую колонку введите название индекса - Ownersid.

  2. Нажмите клавишу Tab для перехода в третью колонку Type.

  3. Откройте при помощи мыши поле со списком. В нем четыре значения: Primary, Candidate, Binary и Regular. Выберите первое, как и в предыдущем случае - Primary.

  4. В четвертую колонку с названием Expression необходимо ввести выражение для составного индекса. Воспользуемся построителем выражений. Для его запуска сделайте щелчок мышью по кнопке Q. Она расположена справа

7. Щелкните мышью по кнопке OK. Visual FoxPro попросит подтвердить сделанные изменения. В окне выберите кнопку Yes.

Создание обычного индекса по полю таблицы. Порядок создания как простого индекса (Regular), так и уникального (индекса-кандидата Candidate) - один и тот же и практически ничем не отличается от создания первичного ключа. Просто в пункте номер пять предыдущей инструкции выберите соответствующее значение (Regular или Candidate). Все индексы одной таблицы Visual FoxPro хранит в одном CDX-файле.