Организация связей между таблицами
Организация связей между таблицами
Исходные таблицы в Access представляют собой обычные плоские таблицы Конечно, они не позволяют формировать иерархические информационные структуры; для данной цели используется аппарат связей между таблицами. Access 2002 дает возможность организовывать и отображать эти связи двумя способами:
• путем создания непосредственных связей между таблицами;
• путем создания вложенных таблиц данных.
Кроме того, в Access 2002, так же как и в Access предыдущих версий, существует довольно мощный аппарат гиперссылок, который применим для формирования таблиц и форм. Мы обсудим возможности использования гиперссылок на примере работы с географическими картами в главе 4.
Создание связей между таблицами
Когда между двумя таблицами устанавливается связь, это означает, что величины из одной таблицы ставятся в соответствие величинам из другой таблицы.
Создавать или изменять связи между открытыми таблицами нельзя, поэтому перед началом работы их следует закрыть. Теперь перейдите в окно базы данных (см. рис. 3.1). Такой переход осуществляется двумя способами. Первый вариант: в режиме просмотра любой формы щелкните по кнопке
на панели базы данных. Другой способ: находясь в любом диалоговом окне Access 2002, воспользуйтесь функциональной клавишей F11. Затем щелкните по кнопке
открывающей схему данных, на панели инструментов. Если в базе данных еще не определено никаких связей, на экран будет выведено окно Добавление таблицы (см. рис. 3.28). Если же в открытую на экране схему данных, пример которой показан на рис. 2.1, необходимо добавить таблицы, которых в этой схеме еще нет, щелкните по кнопке
на панели инструментов открытой схемы данных.
Рис. 3.28
Итак, вы последовательно добавляли все таблицы, то есть помечали их в окне и затем щелкали по клавише Добавить в окне, показанном на рис. 3.28. Теперь закройте это окно с помощью кнопки Закрыть. В результате появится диалоговое окно Схема данных, представленное на рис. 3.29. В этом окне вы должны организовать связи между таблицами. Связи устанавливаются через отдельные, определяемые пользователем поля. Для связывания этих полей надо выбрать поле в одной таблице и перетащить его, наложив на соответствующее поле в другой таблице.
Обычно связывают ключевое поле родительской таблицы (внешний ключ) с соответствующим ему полем в другой, дочерней таблице. Оно часто имеет то же имя, что и первое, но в общем случае это не обязательно. Зато строго обязательными являются следующие условия:
• в одной или в обеих таблицах должно быть поле, принимающее уникальные (не имеющие дублей) значения во всех записях;
• связываемые поля должны иметь одинаковые типы данных. Однако из этого правила есть два исключения:
– поле счетчика разрешается связывать с числовым полем, если в последнем задано значение Длинное целое;
– поле счетчика разрешается связывать с числовым полем, если для обоих полей в свойстве Размер поля задано значение Код репликации;
• связываемые поля числового типа должны иметь одинаковые значения свойства Размер поля.
Для начала свяжите поле Код в таблице Страны с полем Код страны в таблице Фирмы. Для этого щелкните левой кнопкой мыши по одному из связываемых полей и, не отпуская ее, перетащите мышь на другое поле. На экране появится диалоговое окно Изменение связей (рис. 3.30).
В левой части этого окна указано связываемое поле родительской таблицы, а в правой – связываемое поле дочерней таблицы. Если надо изменить одно из этих полей, можно щелкнуть в нем по стрелке прокрутки, а затем выбрать желаемое значение. Установив флажок Обеспечение целостности данных, вы зададите условие: ни в одной из связанных таблиц не будет записей, у которых нет соответствующих «партнеров» в другой таблице. Еще два флажка определяют режимы обновления и удаления полей:
• каскадное обновление связанных полей – устанавливает, что значения поля Код страны в таблице Фирмы изменяются в соответствии со значениями поля Код страны в таблице Страны. Этот флажок имеет смысл установить;
• каскадное удаление связанных записей – устанавливает, что если из первой таблицы будут удалены названия каких-либо стран, то удалятся и соответствующие фирмы во второй таблице. В рассматриваемой ситуации этот флажок вряд ли следует устанавливать, поскольку, во-первых, фирма может иметь дочернее отделение с тем же именем в другой стране; во-вторых, если приборы, выпускаемые этой фирмой, в базе данных остаются, то они в случае каскадного удаления могут оказаться «беспризорными».
Заслуживает внимания клавиша Ообъединение. Щелкнув по ней, вы откроете список возможных критериев для отбора тех записей, которые будут связываться. Вот имеющиеся варианты:
• связь распространяется только на те записи, в которых значения обеих таблиц совпадают;
• связь распространяется на все записи из таблицы Страны и только на те поля таблицы Фирмы, в которых значения, содержащиеся в объединяемых полях, совпадают;
• связь распространяется на все записи из таблицы Фирмы и только на те поля таблицы Страны, в которых значения объединяемых полей совпадают.
Для нашего примера выберем первый, самый простой вариант. Стоит отметить, что обычно подобные решения зависят от конкретной ситуации.
Итак, в поле Тип отношения следует указать, какого типа отношения устанавливаются между таблицами. В данном случае это отношение один-ко-многим.
Теперь щелкните по кнопке Создать. В окне Схема данных появится линия связи между таблицами Страны и Фирмы – рис. 3.31.
Проделав такую процедуру для всех таблиц базы данных, вы получите необходимую систему связей, которая была в качестве примера показана на рис. 2.1.
Мастер печати связей
Чтобы напечатать схему связей, необходимо:
1. Открыть соответствующую базу данных.
2. Открыть подменю Сервис в строке меню этой базы данных. Выбрать пункт Схема данных, чтобы открыть одноименное диалоговое окно.
3. Открыть меню Файл, а в нем активизировать опцию Печать схемы данных.
Подтаблицы
В Access 2002 возможен и другой вариант введения и отображения связей между таблицами, имеющийся начиная с версии Access 2000, – использование подтаблиц. Иерархичность структуры баз данных в этом случае проявляется особенно наглядно.
Подтаблицу можно добавить в любую таблицу, запрос или форму. Форма в режиме формы или таблицы также может иметь подтаблицу. В подтаблицы могут включаться связанные или объединенные данные, находящиеся и в таблицах, и в формах, и в запросах, поэтому вложенными бывают также и формы, и запросы. В этом разделе мы расскажем именно о подтаблицах, создаваемых в режиме таблиц, а об использовании этого механизма для форм и запросов поговорим в соответствующих разделах.
Чтобы создать подтаблицу, как обычно, сначала войдите в окно базы данных и откройте требуемую таблицу (пусть это будет таблица Страны). Она будет выглядеть так, как показано на рис. 3.32.
Перейдем в режим конструктора и щелкнем в этом режиме правой кнопкой мыши по заголовку таблицы – Страны: таблица (рис. 3.33). Откроется контекстное меню, в котором надо выбрать позицию Свойства. В результате на экране появится окно Свойства таблицы, в котором нас интересует конкретная позиция Имя подтаблицы. После щелчка в этой позиции (левой кнопкой) в строке появится стрелка прокрутки
после нажатия на нее отобразится меню, содержащее те объекты базы данных (таблицы, формы, запросы), которые мы хотели бы видеть в качестве подчиненных в таблице Страны (рис. 3.34).
Выберем в этом меню позицию Таблица. Фирмы и после обычных преобразований (режим конструктора, сохранение изменений в таблице, окно базы данных, открытие таблицы) получим первичную таблицу Страны – рис. 3.35.
Следует добавить, что кроме поля Имя подтаблицы необходимо заполнить еще два поля в указанном окне Свойства таблицы, а именно: Подчиненные поля и Основные поля. Их надо заполнить именами тех полей, которые являются связующими между таблицами. В данном случае подчиненным полем будет Код фирмы, основным полем – Код.
На первый взгляд эта таблица идентична предыдущей, приведенной на рис. 3.32. Однако обратите внимание на значки (+), стоящие возле каждого кода фирмы. Они указывают на то, что здесь в свернутом виде содержится информация. Если щелкнуть по такому значку, соответствующая строка раскроется, и вы увидите перечень фирм, относящихся к этой стране, в данном случае USA (см. рис. 3.36).
Иначе говоря, на рис. 3.36 продемонстрирована иерархическая двухуровневая структура Страны и Фирмы. Теперь для таблицы второго уровня – Фирмы – выполним такие же действия с окнами Свойства таблицы и Имя подтаблицы (см. рис. 3.34). В качестве родительской таблицы примем Фирмы, а в качестве дочерней – Менеджер. Связанными полями в обеих таблицах определим Код фирмы. Тогда таблица Фирмы, в свою очередь, будет содержать свернутую информацию о менеджерах, что также показано на рис. 3.34. Если вы раскроете эту информацию, то увидите уже трехуровневую иерархическую структуру Страны, Фирмы и Менеджер (см. рис. 3.38). Таким способом в принципе можно создать иерархическое дерево. В пределах таблицы можно вложить до восьми уровней подтаблиц. Однако каждая таблица или подтаблица, как мы видим, может иметь только одну вложенную подтаблицу. Подтаблица, относящаяся к подчиненной форме, может использовать в качестве источника данных таблицу, запрос или форму.
Кроме того, Access 2002 автоматически создает подтаблицу в таблице, имеющей отношение «один-к-одному» или являющейся стороной «один» в отношении «один-ко-многим», если свойство таблицы Имя подтаблицы имеет значение Авто.
Но это еще не все. Подтаблицу можно создать (по мнению автора) и более простым способом. И в дополнение к этому Access 2002 позволяет создать инвертированную подтаблицу. Если подтаблица, включенная в таблицу Страны, показывает фирмы, относящиеся к данной стране (точнее, к записи, связанной с этой страной), то инвертированная подтаблица, включенная в таблицу Фирмы, отобразит страны, связанные с этой фирмой.
Покажем это построение с использованием более простого пути. Откроем таблицу Фирмы (рис. 3.38).
Теперь откроем меню Вставка и в нем позицию Подтаблица. На вкладке Таблицы выделим Страны. В этом случае таблица Фирмы будет основной, а таблица Страны – подчиненной. Поэтому в нижней части диалогового окна Вставка подтаблицы укажем с помощью стрелок прокрутки в качестве основного поля Код фирмы, а в качестве подчиненного – Код (рис. 3.39).
Открытая таблица Фирмы будет выглядеть так, как показано на рис. 3.40.
В качестве примера открыто два фрагмента. При этом в таблице Страны созданная раньше подтаблица (рис. 3.35) осталась неизменной. Если необходимо одним щелчком развернуть все записи подтаблицы или свернуть все раскрытые записи, следует выбрать позицию Подтаблица в меню Формат (при открытой таблице Фирмы). Эта же позиция позволяет удалить подтаблицу.
Следует сказать, что такой способ применим для создания любой подтаблицы, а не только для инвертированной, как могло бы показаться из данного примера. Он не изменяет уже имеющихся связей между таблицами, отображаемых на схеме данных, но требует, чтобы между основной таблицей и подтаблицей связь такого типа была установлена. Если такая связь при создании подтаблицы отсутствует, Access с вашего позволения установит ее автоматически.
Таким образом, создание подтаблиц в Access правильнее отнести не к новому типу связей, а скорее к новому типу их отображения.Данный текст является ознакомительным фрагментом.