- •Практическое занятие 1
- •1.3. Таблицы и связи между ними. Первичные и внешние ключи
- •1.4. Краткие сведения о субд ms Access
- •1.5. Начало работы с ms Access. Создание новой таблицы
- •1.6. Определение ключевых полей
- •1.7. Определение индексов
- •1.8. Установка связей между таблицами
- •1.9. Использование подстановок при определении структуры таблиц и вводе данных в них
- •1.10. Изменение структуры таблиц
- •1.11. Переименование и удаление таблиц
- •1.12. Редактирование связей
- •1.13. Сортировка данных
- •1.14. Поиск и замена данных
- •1.15. Порядок проведения занятия
- •1.16. Содержание отчета
- •1.17. Контрольные вопросы
1.6. Определение ключевых полей
Любая таблица базы данных в обязательном порядке должна иметь первичный ключ, однозначно идентифицирующий каждую запись. В таблице не может быть нескольких записей с одним и тем же значением ключа. В многотабличной базе данных ключевые поля используются также для установления связей между таблицами.
Первичным ключом таблицы может быть любое поле, однозначно идентифицирующее ее записи. Так, например, в таблице Студенты таким полем мог бы быть номер зачетной книжки, а в таблице Группы – номер группы. Однако в этом случае всегда возникает вопрос: может ли при определенных условиях значение ключа быть изменено? Представим, например, что руководство ВУЗа решило изменить систему нумерации групп. В таком случае в базе данных придется выполнить эту перенумерацию не только в таблице Группы, но и во всех связанных с ней таблицах, например, в таблице Студенты.
Поэтому более предпочтительным является использование в качестве первичного ключа специально создаваемого автоинкрементного поля типа “счетчик”, значения которого автоматически формируются при вводе новых записей и не могут быть изменены пользователем. Такие ключи обладают рядом важных преимуществ:
снимается проблема обновления внешних ключей в связанных таблицах, так как первичный ключ типа “счетчик” не может быть изменен;
разработчик базы данных получает полную свободу в изменении содержимого и свойств неключевых полей таблицы, так как такие изменения уже не влияют на связанные таблицы;
поле типа “счетчик” имеет относительно небольшую длину (8 байтов), что позволяет экономно использовать память в связанных таблицах;
упрощаются и унифицируются связи между таблицами.
Для определения поля как ключевого нужно, находясь в конструкторе таблиц, установить курсор в строке с именем этого поля и нажать на кнопку Ключевое поле. После этого в строке рядом с именем выбранного поля появится изображение ключа. Для отмены выбора ключевого поля достаточно еще раз нажать кнопку Ключевое поле, находясь в строке с ключевым полем. Для переопределения ключевого поля надо выполнить это действие, находясь в строке с любым другим полем таблицы.
В таблицах, реализующих связь “многие-ко-многим”, первичный ключ часто бывает составным, состоящим из двух или более внешних ключей. Так, в таблице Оценки первичный ключ состоит из двух внешних ключей КодСтудента+КодДисциплины. Такой ключ позволяет избежать дублирования оценок студентов по одной и той же дисциплине.
Чтобы определить составной первичный ключ таблицы, надо выделить ключевые поля в столбце ключей с помощью мыши и клавиши Shift, а затем нажать кнопку Ключевое поле. При этом изображения ключа появляются во всех соответствующих строках.
Если к моменту сохранения создаваемой таблицы ключевое поле не определено, то Access предлагает и в случае подтверждения автоматически создает первичный ключ, вставив перед первым указанным в структуре полем поле Код и задав для него тип “счетчик”.
1.7. Определение индексов
Как уже отмечалось в п. 1.5, создание индексов по отдельным полям таблицы позволяет ускорить выполнение операций поиска и сортировки по этим полям, а также выполнение запросов, в которых участвуют индексируемые поля. Кроме того, создание уникальных индексов позволяет избежать повторения значений в этих полях. Следует иметь в виду, что по ключевому полю (полям) таблицы автоматически создается уникальный индекс с именем PrimaryKey.
Индексы занимают дополнительное место на диске. Кроме того, на их модификацию при обновлении данных в таблице тратится дополнительное время. Потому индексы следует создавать только по тем полям, по которым будет производиться поиск и сортировка данных, а также по полям, участвующим в запросах к базе данных.
Уникальные индексы следует создавать по тем полям или их комбинациям (составные индексы), которые не должны повторяться при вводе данных в таблицу, если такая уникальность не обеспечивается первичным ключом таблицы. Например, таблица Студенты в базе данных Успеваемость студентов имеет ключевое поле Код типа “счетчик”, а поле НомерЗачетки является неключевым. Очевидно, что по номеру зачетки может производиться поиск и сортировка данных, и этот атрибут может использоваться в различных запросах к БД. Поэтому по полю НомерЗачетки следует создать индекс, причем он должен быть уникальным во избежание появления в таблице Студенты нескольких записей о студентах с одним и тем же номером зачетки.
Индекс по некоторому полю может быть создан путем соответствующей установки свойства Индексированное поле в конструкторе таблиц (см. п. 1.5). Кроме того, индексы могут быть созданы, отредактированы и просмотрены в окне Индексы (рис. 1.3), появляющемся при нажатии кнопки Индексы в конструкторе таблиц. Использование окна индексов является единственной возможностью для создания составных индексов по нескольким полям.
