Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
19. ACCESS Связи между таблицами.docx
Скачиваний:
3
Добавлен:
27.09.2019
Размер:
54.57 Кб
Скачать

Руководство по связям между таблицами

Применимо к: Microsoft Access 2010

Печать

Одной из целей создания хорошей структуры базы данных является устранение избыточности (повторов) данных. Для этого нужно распределить их по нескольким отдельным тематически организованным таблицам, чтобы каждый факт был представлен только один раз. Затем в приложении Access необходимо задать порядок совместного использования распределенных данных, для чего следует создать общие поля в связанных таблицах. Однако чтобы сделать это правильно, нужно сначала понять связи между таблицами и описать их в базе данных.

Дополнительные сведения см. в статье Основные сведения о создании баз данных.

В этой статье не рассматриваются связи в веб-базе данных. В таких базах отсутствует окно «Схема данных». Для создания связей в веб-базе данных используются поля подстановок. Дополнительные сведения см. в статьеСоздание базы данных для совместного использования в Интернете.

В этой статье

  • Введение

  • Типы связей между таблицами

  • Зачем создавать связи между таблицами?

  • Понятие о целостности данных

  • Просмотр связей между таблицами

  • Создание связи между таблицами

  • Удаление связи между таблицами

  • Изменение связи между таблицами

  • Обеспечение целостности данных

Введение

После создания таблицы для каждой темы в базе данных нужно предоставить приложению Access средства, с помощью которых можно будет при необходимости объединять сведения. Это делается путем создания общих полей в связанных таблицах и настройки связей между таблицами. После этого можно создавать запросы, формы и отчеты, одновременно отображающие сведения из нескольких таблиц. Например, приведенная ниже форма содержит сведения из нескольких таблиц.

 Эта форма содержит данные из таблицы клиентов,

 заказов,

 товаров

 и сведений о заказах.

Имя клиента в поле Плательщик получено из таблицы "Клиенты", значения кода заказа и даты заказа — из таблицы "Заказы", наименование товара — из таблицы "Товары", а цена и количество — из таблицы "Заказано". Чтобы можно было передать данные в форму, эти таблицы связаны друг с другом несколькими способами.

В приведенном примере поля в таблицах должны быть согласованы таким образом, чтобы отображать сведения об одном и том же заказе. Это согласование осуществляется путем установления связей между таблицами. Связь между таблицами устанавливает отношения между значениями в ключевых полях — часто между полями, имеющими одинаковые имена в обеих таблицах. В большинстве случаев с первичным ключом одной таблицы, являющимся уникальным идентификатором каждой записи, связываетсявнешний ключ другой таблицы. Например, для связывания сотрудников с заказами, за которые они отвечают, можно создать связь между полями "Код сотрудника" в таблицах "Сотрудники" и "Заказы".

 Поле "Код сотрудника" отображается в двух таблицах: как первичный ключ...

 и как внешний ключ.

 К НАЧАЛУ СТРАНИЦЫ

Типы связей между таблицами

Существует три типа связей между таблицами.

  • Связь "один-ко-многим"

Рассмотрим базу данных для учета заказов, содержащую таблицы "Клиенты" и "Заказы". Клиент может оформить любое количество заказов. Следовательно, у любого клиента, представленного в таблице "Клиенты", может быть много заказов, представленных в таблице "Заказы". Поэтому связь между таблицами "Клиенты" и "Заказы" — это связь "один-ко-многим".

Чтобы создать связь "один-ко многим" в структуре базы данных, добавьте первичный ключ на стороне "один" в таблицу на стороне "многие" в виде дополнительного поля. В данном примере необходимо добавить новое поле — поле "Код" из таблицы "Клиенты" — в таблицу "Заказы" и назвать его "Код клиента". После этого Access сможет использовать номер "Код клиента" из таблицы "Заказы" для поиска клиента, оформившего тот или иной заказ.

  • Связь "многие-ко-многим"

Рассмотрим связь между таблицей "Продукты" и таблицей "Заказы". Один заказ может включать несколько продуктов. С другой стороны, отдельный продукт может содержаться в нескольких заказах. Следовательно, для каждой записи таблицы "Заказы" может существовать несколько записей в таблице "Продукты" и наоборот. Такой тип связи называется связью "многие-ко-многим", поскольку каждому продукту может соответствовать много заказов и наоборот. Обратите внимание, что для обнаружения существующей связи "многие-ко-многим" между таблицами важно рассмотреть обе ее стороны.

Чтобы представить связь "многие-ко-многим", нужно создать третью (связующую) таблицу, в которой она разбивается на две связи "один-ко-многим". Первичные ключи двух таблиц вставляются в третью таблицу. В результате в третьей таблице сохраняются все экземпляры связи. Например, таблицы "Заказы" и "Продукты" имеют связь "многие-ко-многим", определяемую путем создания двух связей "один-ко-многим" в таблице "Заказано". В одном заказе может быть много продуктов, и каждый продукт может быть указан во многих заказах.

  • Связь "один-к-одному"

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

 К НАЧАЛУ СТРАНИЦЫ

Зачем создавать связи между таблицами?

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

  • Связи между таблицами предоставляют сведения для структурирования запросов

Для работы с записями из нескольких таблиц часто приходится создавать запросы, соединяющие таблицы. Запрос сопоставляет значения в поле первичного ключа первой таблицы с полем внешнего ключа второй таблицы. Например, чтобы получить строки, в которых перечисляются все заказы для каждого из клиентов, можно создать запрос, соединяющий таблицу "Клиенты" с таблицей "Заказы" на основе поля "Код клиента". В окне "Схема данных" можно вручную указать поля для соединения. Но если связь между таблицами уже существует, Access использует соединение по умолчанию на основе существующей связи между таблицами. Кроме того, при использовании одного из мастеров запросов Access использует сведения об уже определенных связях между таблицами, чтобы предоставить пользователю выбор и подставить в параметры свойств соответствующие значения по умолчанию.

  • Связи между таблицами предоставляют сведения для структурирования форм и отчетов

При создании формы или отчета Access использует сведения об уже определенных связях между таблицами, чтобы предоставить пользователю выбор и подставить в параметры свойств соответствующие значения по умолчанию.

  • Связи между таблицами — это та основа, с помощью которой можно обеспечить целостность данных, чтобы в базе данных не было потерянных записей. Потерянная запись — это запись со ссылкой на несуществующую запись (например, запись заказа со ссылкой на отсутствующую запись клиента).

При создании базы данных сведения распределяются по таблицам, в каждой из которых есть первичный ключ. После этого к связанным таблицам добавляются внешние ключи, имеющие ссылки на первичные ключи. Эти пары из внешнего и первичного ключей формируют основу для связей между таблицами и многотабличных запросов. Поэтому важно, чтобы ссылки "внешний ключ — первичный ключ" оставались синхронизированными. Целостность данных гарантирует, что ссылки остаются синхронизированными, и зависит от связей между таблицами.

 К НАЧАЛУ СТРАНИЦЫ

Понятие о целостности данных

При создании базы данных сведения распределяются по множеству тематически организованных таблиц, чтобы свести к минимуму избыточность данных. После этого задается порядок совместного использования распределенных данных, для чего в связанных таблицах создаются общие поля. Например, чтобы создать связь "один-ко-многим", добавьте первичный ключ из таблицы на стороне "один" как дополнительное поле в таблицу на стороне "многие". Чтобы соединить данные, Access подставляет значение из таблицы на стороне "многие" в соответствующее поле таблицы на стороне "один". Таким образом, значения таблицы на стороне "многие" связаны с соответствующими значениями на стороне "один".

Предположим, между таблицами "Грузоотправители" и "Заказы" существует связь "один-ко-многим", и нужно удалить грузоотправителя. Если у грузоотправителя, которого нужно удалить, есть заказы в таблице "Заказы, они станут потерянными записями после удаления записи грузоотправителя. В таблице "Заказы" останется код грузоотправителя, но он будет недействителен, поскольку запись, на которую он ссылается, уже не существует.

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

Целостности данных можно добиться, если включить ее при создании связи между таблицами (см. пошаговые инструкции в разделе Обеспечение целостности данных). В результате приложение Access запрещает для этой связи все действия, которые могут нарушить целостность данных. Это значит, что Access будет запрещать обновления, изменяющие целевой объект ссылки, и операции удаления, которые его удаляют. Однако может возникнуть ситуация, когда потребуется изменить первичный ключ для грузоотправителя, имеющего заказы в таблице "Заказы". В таких случаях нужно, чтобы приложение Access автоматически обновило все задействованные строки в рамках одной операции. Так Access гарантирует, что обновление полностью завершено и база данных не осталась в несогласованном состоянии (одни строки обновлены, а другие — нет). Для этого в Access предусмотрен параметр "Каскадное обновление связанных полей". Если при включении целостности данных был выбран этот параметр, то при последующем обновлении первичного ключа будут автоматически обновлены все связанные с ним поля.

Может потребоваться удалить строку и все связанные записи — например, запись грузоотправителя и все связанные с ним заказы. Для этого в приложении Access предусмотрен параметр "Каскадное удаление связанных записей". Если при включении целостности данных выбрать его, а затем удалить запись на стороне первичного ключа в связи, Access автоматически удалит все записи со ссылкой на первичный ключ.

 К НАЧАЛУ СТРАНИЦЫ

Просмотр связей между таблицами

Чтобы просмотреть связи между таблицами, выберите пункт Схема данныхна вкладке Работа с базами данных. Откроется окно "Схема данных", в котором будут отображены все существующие связи. Если связи еще не были определены или это окно открывается впервые, приложение Access предложит добавить в окно таблицу или запрос.

Вызов окна "Схема данных"

  1. На вкладке Файл нажмите кнопку Открыть.

  2. В диалоговом окне Открытие файла базы данных выберите и откройте базу данных.

  3. На вкладке Работа с базами данных в группе Схема данных щелкните элемент Схема данных.

  4. Если в базе данных есть связи, будет отображено окно "Схема данных". Если в базе данных нет связей или это окно открывается впервые, будет отображено диалоговое окно Добавление таблицы. Нажмите кнопку Закрыть, чтобы закрыть это диалоговое окно.

  1. На вкладке Конструктор в группе Связи щелкните Все связи.

Будут отображены все связи, определенные в базе данных. Обратите внимание, что скрытые таблицы (таблицы, для которых установлен флажокСкрытый в диалоговом окне Свойства) и их связи не будут отображены, если не установлен флажок Показывать скрытые объекты в диалоговом окнеПараметры переходов.

Связь между таблицами представляется как линия между таблицами в окне "Схема данных". Связь, не обеспечивающая целостность данных, отображается как тонкая линия между общими полями, поддерживающими связь. Если выбрать связь, щелкнув линию, то линия станет жирной. Если обеспечить целостность данных для этой связи, линия станет толще на концах. Кроме того, над жирной частью линии с одной стороны связи будет отображаться цифра 1, а с другой стороны — символ бесконечности ().

Когда открыто окно "Схема данных", на ленте доступны указанные ниже команды.

На вкладке Конструктор в группе Сервис

  • Изменить связи   . Открывает диалоговое окно Изменение связей . При выборе линии связи можно щелкнуть элемент Изменить связи, чтобы изменить связь между таблицами. Можно также дважды щелкнуть линию связи.

  • Очистить макет   . Запрещает отображение всех таблиц и связей в окне "Схема данных". Имейте в виду, что эта команда только скрывает таблицы и связи, но не удаляет их.

  • Отчет о связях   . Создает отчет, отображающий таблицы и связи базы данных. В отчете отображаются только таблицы и связи, не скрытые в окне "Схема данных".

На вкладке Конструктор в группе Отношения

  • Добавить таблицу   . Открывает диалоговое окно Добавление таблицы, чтобы можно было выбрать таблицы и запросы для просмотра в окне "Схема данных".

  • Скрыть таблицу   . Скрывает выбранную таблицу в окне "Схема данных".

  • Прямые связи   . Отображает все связи и связанные таблицы для выбранной таблицы в окне "Схема данных", если они еще не отображены.

  • Все связи   . Отображает все связи и связанные таблицы базы данных в окне "Схема данных". Имейте в виду, что скрытые таблицы (таблицы, для которых установлен флажок Скрытый в диалоговом окнеСвойства) и их связи не будут отображены, если не установлен флажок "Показывать скрытые объекты" в диалоговом окне "Параметры переходов".

  • Закрыть   . Закрывает окно "Схема данных". Если в макет окна "Схема данных" были внесены какие-либо изменения, будет предложено сохранить их.

 К НАЧАЛУ СТРАНИЦЫ

Создание связи между таблицами

Связь между таблицами можно создать с помощью окна "Схема данных" или путем перетаскивания поля в таблицу из области Список полей. При создании связи между таблицами не требуется, чтобы общие поля имели одинаковые имена. Вместо этого поля должны иметь одинаковый тип данных. Однако если поле первичного ключа имеет тип "Счетчик", поле внешнего ключа может иметь тип "Числовой" при условии, что свойствоРазмер поля обоих полей одинаково. Например, можно сопоставить поле с типом "Счетчик" и поле с типом "Числовой", если свойство Размер поля обоих полей имеет значение "Длинное целое". Если оба общих поля имеют тип "Числовой", они должны иметь одинаковое значение свойства Размер поля.

СОЗДАНИЕ СВЯЗИ МЕЖДУ ТАБЛИЦАМИ С ПОМОЩЬЮ ОКНА "СХЕМА ДАННЫХ"

  1. На вкладке Файл нажмите кнопку Открыть.

  2. В диалоговом окне Открытие файла базы данных выберите и откройте базу данных.

  3. На вкладке Работа с базами данных в группе Схема данных щелкните элемент Схема данных.

  4. Если ни одна связь еще не определена, автоматически откроется диалоговое окно Добавление таблицы. Если это окно не открылось, на вкладке Конструктор в группе Связи нажмите кнопку Отобразить таблицу.

В диалоговом окне Добавление таблицы отображаются все таблицы и запросы базы данных. Чтобы просмотреть только таблицы, выберите пунктТаблицы. Чтобы просмотреть только запросы, выберите пункт Запросы. Чтобы просмотреть и таблицы, и запросы, выберите пункт Все.

  1. Выберите одну или несколько таблиц или запросов и нажмите кнопкуДобавить. По завершении добавления таблиц и запросов в окно "Схема данных" нажмите кнопку Закрыть.

  2. Перетащите поле (как правило, поле первичного ключа) из одной таблицы на общее поле (поле внешнего ключа) в другой таблице. Чтобы перетащить сразу несколько полей, нажмите клавишу CTRL и, удерживая ее нажатой, выделите каждое поле.

Откроется диалоговое окно Изменение связей.

  1. Убедитесь, что имена общих полей связи отображаются правильно. Если имя поля отображается неверно, щелкните его и выберите новое поле в списке.

Чтобы обеспечить для этой связи целостность данных, установите флажокОбеспечение целостности данных. Дополнительные сведения о целостности данных см. в разделах Понятие о целостности данных иОбеспечение целостности данных.

  1. Нажмите кнопку Создать.

Между двумя таблицами будет нарисована линия связи. Если установлен флажок Обеспечение целостности данных, концы линии будут выглядеть утолщенными. Кроме того, если установлен флажок Обеспечение целостности данных, над жирной частью линии с одной стороны связи будет отображаться цифра 1, а с другой стороны — символ бесконечности ().

 ПРИМЕЧАНИЯ 

  • Создание связи "один-к-одному"   . Оба общих поля (как правило, поля первичного ключа и внешнего ключа) должны иметь уникальный индекс. Это означает, что свойство Индексированное поле должно иметь для этих полей значение Да (Совпадения не допускаются). Если оба поля имеют уникальный индекс, в Access создается связь "один-к-одному".

  • Создание связи "один-ко-многим"   . Поле на стороне "один" связи (как правило, это первичный ключ) должно иметь уникальный индекс. Это означает, что свойство Индексированное поле этого поля должно иметь значение Да (Совпадения не допускаются). Полю на стороне "многие" не должен соответствовать уникальный индекс. У него может быть индекс, однако он должен допускать совпадения. Это означает, что его свойство Индексированное поле может иметь значение Нетлибо Да (Допускаются совпадения). Если у одного поля есть уникальный индекс, а у другого — нет, приложение Access создает связь "один-ко-многим".

СОЗДАНИЕ СВЯЗИ МЕЖДУ ТАБЛИЦАМИ С ПОМОЩЬЮ ОБЛАСТИ "СПИСОК ПОЛЕЙ"

Добавить поле в существующую таблицу, открытую в режиме таблицы, можно, перетащив его из области Список полей. В области Список полейотображаются поля, доступные в связанных таблицах, а также поля, доступные в других таблицах. При перетаскивании поля из другой (несвязанной) таблицы и выполнении инструкций мастера подстановок между таблицей из области Список полей и таблицей, в которую перетаскивается поле, автоматически создается связь "один-ко-многим". Эта связь, созданная Access, не обеспечивает целостность данных по умолчанию. Чтобы обеспечить целостность данных, нужно изменить связь. Дополнительные сведения см. в разделе Изменение связи между таблицами.

Открытие таблицы в режиме таблицы

  1. На вкладке Файл нажмите кнопку Открыть.

  2. В диалоговом окне Открытие файла базы данных выберите и откройте базу данных.

  3. В области навигации щелкните правой кнопкой мыши таблицу, в которой нужно добавить поле и создать связь, а затем выберите команду Открыть.

Открытие области "Список полей"

  • Нажмите клавиши ALT+F8.

Будет отображена область Список полей.

В области Список полей отображаются все остальные таблицы базы данных, сгруппированные по категориям. При работе с таблицей в режиме таблицы в области Список полей отображаются поля одной из двух категорий:Доступные поля в связанной таблице или Доступные поля в другой таблице. К первой категории относятся все таблицы, связанные с текущей таблицей, а ко второй — все таблицы, не имеющие связи с текущей таблицей.

Чтобы просмотреть список всех полей таблицы, щелкните знак плюс (+) рядом с именем таблицы в области Список полей. Чтобы добавить поле в таблицу, перетащите его из области Список полей в таблицу в режиме таблицы.