Образовавшаяся межтабличная связь отображается в окне Схема данных в виде линии, соединяющей два поля разных таблиц. При этом одна из таблиц считается главной, а другая — связанной. Главная — это та таблица, которая участвует в связи своим ключевым полем (название этого поля на схеме данных отображается полужирным шрифтом).
Здесь мы подходим к важному вопросу: «А зачем вообще нужна связь между таблицами?» У связи два основных назначения. Первое — обеспечение целостности данных, а второе — автоматизация задач обслуживания базы. Представим себе, что в таблице Клиенты, где каждый клиент уникален, кто-то удалит запись для одного
13.3. Работа с СУБД Microsoft Access 2002 357 из клиентов, но не сделает этого в таблице Заказы. Получится, что согласно таблице Заказы некто, не имеющий ни имени, ни адреса, а только абстрактный код, делал заказы. Узнать по коду, кто же это был на самом деле, будет невозможно — произошло нарушение целостности данных. В данном случае владелец базы может применить три подхода: либо вообще ничего не делать для защиты целостности данных, либо запретить удаление данных из ключевых полей главных таблиц, либо разрешить его, но при этом адекватно обработать и связанные таблицы. Вручную сделать это чрезвычайно трудно, поэтому и нужны средства автоматизации.Связь между таблицами позволяет:
• либо исключить возможность удаления или изменения данных в ключевом полеглавной таблицы, если с этим полем связаны какие-либо поля других таблиц;
• либо сделать так, что при удалении (или изменении) данных в ключевом полеглавной таблицы автоматически (и абсолютно корректно) произойдет удаление или изменение соответствующих данных в полях связанных таблиц.
Для настройки свойств связи надо в окне Схема данных выделить линию, соединяющую поля двух таблиц, щелкнуть на ней правой кнопкой мыши и открыть контекстное меню связи, после чего выбрать в нем пункт Изменить связь — откроется диалоговое окно Изменение связей. В нем показаны названия связанных таблиц и имена полей, участвующих в связи (здесь же их можно изменить), а также приведены элементы управления для обеспечения условий целостности данных.
Если установлен только флажок Обеспечение целостности данных, то удалять данные из ключевого поля главной таблицы нельзя. Если вместе с ним включены флажки Каскадное обновление связанных полей и Каскадное удаление связанных записей, то, соответственно, операции редактирования и удаления данных в ключевом поле главной таблицы разрешены, но сопровождаются автоматическими изменениями в связанной таблице.
Таким образом, смысл создания реляционных связей между таблицами состоит, с одной стороны, в защите данных, а с другой стороны — в автоматизации внесения изменений сразу в несколько таблиц при изменениях в одной таблице.Рис. 13.12. Средство настройки межтабличной связи
В учебных целях запросы лучше готовить вручную, с помощью Конструктора. Как и в случае с таблицами, для этого есть специальный значок в окне База данных. Он называется Создание запроса в режиме конструктора и открывает специальный бланк, называемый бланком запроса по образцу. За этим длинным названием скрывается тот приятный факт, что, хотя запросы к таблицам баз данных пишутся на специальном языке программирования — SQL, пользователям Microsoft Access изучать его не обязательно, а большинство операций можно выполнить щелчками кнопок мыши и приемом перетаскивания в бланке.
Бланк запроса по образцу представлен на рис. 13.13. Как видно, он состоит из двух областей. В верхней отображается структура таблиц, к которым запрос адресован, а нижняя область разбита на столбцы — по одному столбцу на каждое поле буду
щей результирующей таблицы.Рис. 13.13. Бланк запроса по образцу
Идея формирования запроса по образцу чрезвычайно проста. С помощью контекстного меню на верхней половине бланка открывают те таблицы, к которым обращен запрос. Затем в них щелкают двойными щелчками на названиях тех полей, которые должны войти в результирующую таблицу. При этом автоматически заполняются столбцы в нижней части бланка. Сформировав структуру запроса, его закрывают, дают ему имя и в дальнейшем запускают двойным щелчком на значке в окне База данных.
Порядок действий, рассмотренный выше, позволяет создать простейший запрос, называемый запросом на выборку. Он позволяет выбрать данные из полей таблиц, на основе которых запрос сформирован.
Упорядочение записей в результирующей таблице. Если необходимо, чтобы данные, отобранные в результате работы запроса на выборку, были упорядочены по какому-либо полю, применяют сортировку. В нижней части бланка имеется специальная строка Сортировка. При щелчке на этой строке открывается кнопка раскрывающегося списка, в котором можно выбрать метод сортировки: по возрастанию или по убыванию. В результирующей таблице данные будут отсортированы по тому полю, для которого задан порядок сортировки.
Возможна многоуровневая сортировка — сразу по нескольким полям. В этом случае данные сначала сортируются по тому полю, которое в бланке запроса по образцу находится левее, затем по следующему полю, для которого включена сортировка, и так далее слева направо. Соответственно, при формировании запроса надо располагать поля результирующей таблицы не как попало, а с учетом будущей сортировки. В крайнем случае, если запрос уже сформирован и надо изменить порядок следования столбцов, пользуются следующим приемом:• выделяют столбец щелчком на его заголовке (кнопку мыши отпускают);• еще раз щелкают на заголовке уже выделенного столбца (но кнопку не отпускают);
• перетаскивают столбец в другое место.
Управление отображением данных в результирующей таблице. В нижней части бланка запроса по образцу имеется строка Вывод на экран. По умолчанию предполагается, что все поля, включенные в запрос, должны выводиться на экран, но это не всегда целесообразно. Например, бывают случаи, когда некое поле необходимо включить в запрос, например потому, что оно является полем сортировки, но в то же время, нежелательно, чтобы пользователь базы видел его содержание. В таких случаях отображение содержимого на экране подавляют сбросом флажка Вывод на экран. Примером может быть запрос на вывод списка сотрудников предприятия, отсортированный по количеству дней, пропущенных по болезни. Он позволит каждому оценить свое положение в этом списке, но не позволит точно узнать, кто сколько дней болел.
Использование условия отбора. Дополнительным средством, обеспечивающим отбор данных по заданному критерию, является так называемое Условие отбора. Соответствующая строка имеется в нижней части бланка запроса по образцу. Для каждого поля в этой строке можно задать индивидуальное условие. На рис. 13.14 представлен пример, в котором мы хотим отобрать из прейскуранта торговой фир-