Связь в Access помогает объединять данные из двух разных таблиц. Каждое отношение состоит из двух полей (по одному в каждой таблице) со связанными данными. Например, таблицы "Товары" и "Сведения о заказах" могут содержать поле "КодТовара". Каждая запись в таблице "Сведения о заказах" содержит значение поля "КодТовара", которому соответствует запись в таблице "Товары" с тем же значением в данном поле.
При использовании связанных таблиц в запросе связь позволяет Access определить, какие записи из каждой таблицы следует объединить в результирующем наборе. Отношение также позволяет избежать потери данных, препятствуя исключению удаленных данных из синхронизации. Это называется целостностью данных.
Перед началом работы с отношениями изучите основные понятия. Дополнительные сведения о см. в статьях Руководство по связям между таблицами и Начало работы со связями между таблицами.
В этой статье
Обзор
В базе данных Access создается табличное отношение с помощью одного из следующих методов:
-
В окне "Схема данных" добавьте таблицы, которые требуется связать, а затем перетащите нужное поле из одной таблицы в другую.
-
Перетащите поле в таблицу из области Список полей.
При создании отношения между таблицами общие поля могут называться по-разному, однако часто требуется, чтобы эти имена совпадали. Очевидно, что общие поля должны иметь одинаковый тип данных. Однако если поле первичного ключа имеет тип "Счетчик", поле внешнего ключа также может быть числовым, если свойство Размер поля (FieldSize) обоих полей совпадает. Например, можно сопоставить поля с типами "Счетчик" и "Числовой", если свойство Размер поля обоих полей имеет значение "Длинное целое". Если оба общих поля являются числовыми, у них должно совпадать значение свойства Размер поля.
Создание отношения между таблицами с помощью окна отношений
-
На вкладке Работа с базами данных в группе Отношения выберите элемент Схема данных.
-
На вкладке Конструктор связей в группе Связи щелкните Добавить таблицы.
-
Выберите одну или несколько таблиц или запросов и нажмите кнопку Добавить. После добавления таблиц и запросов на вкладку "Схема данных" нажмите кнопку Закрыть.
-
Перетащите поле (как правило, поле первичного ключа) из одной таблицы на общее поле (поле внешнего ключа) в другой таблице. Чтобы перетащить сразу несколько полей, нажмите и удерживайте клавишу CTRL, нажмите каждое поле и перетащите выделенные поля. Откроется диалоговое окно Изменение связей.
-
Убедитесь, что имена общих полей отношения отображаются правильно. Если имя поля неправильное, щелкните его и выберите нужное поле из списка. Чтобы обеспечить целостность данных для этой связи, установите флажок Обеспечение целостности данных. Дополнительные сведения о целостности данных см. в разделе Обеспечение целостности данных.
-
Нажмите кнопку Создать.
Access рисует линию связи между двумя таблицами. Если установлен флажок Обеспечение целостности данных, концы линии выглядят утолщенными. Кроме того, если установлен флажок Обеспечение целостности данных, над утолщенной частью на одном конце линии связи будет отображаться цифра 1, а на другом — символ бесконечности (∞), как показано на рисунке ниже.
Примечания:
-
Создание связи "один-к-одному" Оба общих поля (как правило, поля первичного ключа и внешнего ключа) должны иметь уникальный индекс. Это означает, что свойство Индексированное этих полей должно иметь значение Да (Совпадения не допускаются). Если оба поля имеют уникальный индекс, Access создает связь "один к одному".
-
Создание отношения "один-ко-многим". Поле на стороне "один" (как правило, первичный ключ) отношения должно иметь уникальный индекс. Это значит, что свойство Индексированное поле должно иметь значение Да (Совпадения не допускаются). Поле на стороне "многие" не должно иметь уникального индекса. Это поле может быть индексированным, но для него должны допускаться повторы. Это означает, что свойство Индексированное поле должно иметь значение Нет или Да (Допускаются совпадения). Если одно поле имеет уникальный индекс, а другое — нет, Access создает связь "один ко многим".
-
Создание отношения между таблицами с помощью панели списка полей
Добавить поле в существующую таблицу, открытую в режиме таблицы, можно путем перетаскивания этого поля из области Список полей. В области Список полей отображаются доступные поля из связанных таблиц, а также из других таблиц базы данных.
При перетаскивании поля из "другой" (несвязанной) таблицы и выполнении инструкций мастера подстановок между таблицей из области Список полей и таблицей, в которую перетаскивается поле, автоматически создается новое отношение "один-ко-многим". Это отношение, созданное Access, по умолчанию не обеспечивает целостность ссылок. Чтобы обеспечить целостность данных, нужно изменить отношение. Дополнительные сведения см. в разделе Изменение отношения.
Открытие таблицы в режиме таблицы
-
Дважды щелкните таблицу в области навигации.
Открытие области "Список полей"
-
Нажмите клавиши ALT+F8. Будет отображена область Список полей.
В области Список полей отображены все другие таблицы базы данных, сгруппированные по категориям. При работе с таблицей в режиме таблицы Access отображает поля в любой из двух категорий в области Список полей : Поля, доступные в связанных таблицах , и Поля, доступные в других таблицах. К первой категории относятся все таблицы, связанные отношением с текущей таблицей. Во второй категории перечислены все таблицы, с которыми данная таблица не связана отношением.
Чтобы просмотреть список всех полей таблицы, щелкните знак плюс (+) рядом с именем таблицы в области Список полей. Чтобы добавить поле в таблицу, перетащите его из области Список полей в таблицу в режиме таблицы.
Добавление поля и создание связи из области "Список полей"
-
Открыв таблицу в режиме таблицы, нажмите клавиши ALT+F8. Будет отображена область Список полей.
-
Чтобы отобразить список полей в таблице, в группе Доступные поля в другой таблице щелкните знак плюс (+) рядом с именем таблицы.
-
Перетащите нужное поле из области Список полей в таблицу, открытую в режиме таблицы.
-
Когда появится линия вставки, поместите поле в выбранное место.
Появится окно мастера подстановок.
-
Следуйте инструкциям мастера подстановок.
Поле будет отображено в таблице в режиме таблицы.
При перетаскивании поля из "другой" (несвязанной) таблицы и выполнении инструкций мастера подстановок между таблицей из области Список полей и таблицей, в которую было перетаскивается поле, автоматически создается новое отношение "один-ко-многим". Это отношение, созданное Access, по умолчанию не обеспечивает целостность ссылок. Чтобы обеспечить целостность данных, нужно изменить отношение. Дополнительные сведения см. в разделе Изменение отношения.
Изменение отношения
Чтобы изменить отношение, выберите его в окне "Схема данных" и внесите нужные изменения.
-
Установите указатель на линию связи и щелкните линию, чтобы выделить ее.
При выделении линия связи становится толще.
-
Дважды щелкните выделенную линию связи
ИЛИ
На вкладке Конструктор связей в группе Сервис щелкните Изменить связи.
Откроется диалоговое окно Изменение связей.
Открытие диалогового окна "Изменение связей"
-
На вкладке Работа с базами данных в группе Отношения выберите элемент Схема данных.
-
На вкладке Конструктор связей в группе Связи щелкните Все связи.
Будут отображены все таблицы с отношениями, а также соответствующие линии связи. Обратите внимание на то, что скрытые таблицы (таблицы, для которых установлен флажок скрытый в диалоговом окне Свойства) и их отношения не отображаются, если в диалоговом окне Параметры переходов не выбран параметр "Показывать скрытые объекты".
-
Щелкните линию отношения, которое вы хотите изменить. При выделении линия связи становится толще.
-
Дважды щелкните линию связи.
ИЛИ
На вкладке Конструктор связей в группе Сервис щелкните Изменить связи.
Откроется диалоговое окно Изменение связей.
-
Внесите изменения и нажмите кнопку ОК.
В диалоговом окне Изменение связей можно изменить связи между таблицами (например, таблицы, запросы или поля на любой стороне связи). Можно также задать тип соединения или включить обеспечение целостности данных и выбрать каскадный параметр. Дополнительные сведения о типе соединения и его просмотре см. в разделе Указание типа соединения. Дополнительные сведения об обеспечении целостности данных и выборе каскадного параметра см. в разделе Обеспечение целостности данных.
Указание типа соединения
При определении отношения между таблицами сведения о нем влияют на структуру запросов. Например, если вы определяете связь между двумя таблицами, а затем создаете запрос, в котором используются две таблицы, Access автоматически выбирает соответствующие поля по умолчанию на основе полей, указанных в связи. Эти исходные значения в запросе можно переопределить, но часто значения, определенные отношением между таблицами, являются верными. Поскольку сопоставление и объединение данных из двух таблиц являются часто воспроизводимыми действиями во всех базах данных, кроме самых простых, параметры по умолчанию, определенные отношениями между таблицами, могут быть полезны и экономить время.
С помощью запроса к нескольким таблицам можно комбинировать данные из них путем сопоставления значений в общих полях. Операция сопоставления и комбинирования называется объединением. Например, требуется отобразить заказы клиентов. Для этого создается запрос, объединяющий таблицы "Клиенты" и "Заказы" по полю "Код клиента". Результаты запроса содержат сведения о клиенте, а также другие сведения только для строк с найденным соответствующим значением.
Одно из значений, которое можно задать для каждого отношения, — это тип объединения. Тип соединения сообщает Access, какие записи следует включить в результат запроса. Обратимся к описанному примеру с объединением таблиц "Клиенты" и "Заказы" по общим полям, представляющим код клиента. При использовании типа объединения по умолчанию (внутреннего соединения) запрос возвращает только строки таблиц "Клиенты" и "Заказы", для которых общие поля (также называемые связанными полями) совпадают.
Предположим, что требуется включить в результаты всех клиентов — даже тех, которые еще не сделали ни одного заказа. Для этого нужно изменить тип объединения с внутреннего на так называемое левое внешнее соединение. При использовании левого внешнего соединения возвращаются все строки таблицы на левой стороне отношения и только сопоставленные строки на правой. При использовании правого внешнего соединения возвращаются все строки на правой стороне отношения и только сопоставленные — на левой.
Примечание: В этом случае термины "слева" и "справа" относятся к положению таблиц в диалоговом окне Изменение связей, а не в окне "Схема данных".
Следует определить, какие результаты наиболее часто требуются от запроса, соединяющего таблицы в конкретной связи, и в соответствии с этим выбрать тип соединения.
Указание типа соединения
-
В диалоговом окне Изменение связей нажмите кнопку Тип соединения.
Откроется диалоговое окно Параметры соединения.
-
Выберите нужный вариант и нажмите кнопку ОК.
В таблице ниже, составленной на основании таблиц "Клиенты" и "Заказы", приведены три варианта, отображаемые в окне Параметры объединения, указан используемый в них тип объединения, а также то, какие именно строки (все или только сопоставленные) возвращаются для каждой из таблиц.
|
Выбор |
Родственное объединение |
Левая таблица |
Правая таблица |
|---|---|---|---|
|
1. Объединение только тех записей, в которых связанные поля обеих таблиц совпадают. |
Внутреннее соединение |
Сопоставленные строки |
Сопоставленные строки |
|
2. Объединение ВСЕХ записей из таблицы "Клиенты" и только тех записей из таблицы "Заказы", в которых связанные поля совпадают. |
Левое внешнее соединение |
Все строки |
Сопоставленные строки |
|
3. Объединение ВСЕХ записей из таблицы "Заказы" и только тех записей из таблицы "Клиенты", в которых связанные поля совпадают. |
Правое внешнее соединение |
Сопоставленные строки |
Все строки |
При выборе варианта 2 или 3 на линии связи будет отображена стрелка, указывающая на ту сторону связи, в которой отображаются только сопоставленные строки.
Внесение изменений в окне "Параметры объединения"
-
На вкладке Работа с базами данных в группе Отношения нажмите кнопку Схема данных.
-
На вкладке Конструктор связей в группе Связи щелкните Все связи. Будут отображены все таблицы со связями, а также соответствующие линии связи. Обратите внимание на то, что скрытые таблицы (таблицы, для которых установлен флажок скрытый в диалоговом окне Свойства) и их отношения не отображаются, если в диалоговом окне Параметры переходов не выбран параметр "Показывать скрытые объекты".
-
Щелкните линию отношения, которое вы хотите изменить. При выделении линия связи становится толще.
-
Дважды щелкните линию связи. Откроется диалоговое окно Изменение связей.
-
Нажмите кнопку Тип объединения.
-
В диалоговом окне Свойства соединения выберите параметр и нажмите кнопку ОК.
-
Внесите в связь необходимые изменения и нажмите кнопку ОК.
Обеспечение целостности данных
Целью обеспечения целостности данных является предотвращение появления непарных записей, ссылающихся на несуществующие записи. Обеспечение целостности данных включается для конкретного отношения между таблицами. После принудительного применения Access отклоняет любую операцию, которая нарушила бы целостность ссылок для этого отношения таблицы. Это означает, что Access будет отклонять как обновления, изменяющие целевой объект ссылки, так и удаления, которые удаляют целевой объект ссылки. Сведения о том, как Access распространять ссылочное обновление и удаление, чтобы изменить все связанные строки соответствующим образом, см. в разделе Установка параметров каскада .
Включение и отключение обеспечения целостности данных
-
На вкладке Работа с базами данных в группе Отношения нажмите кнопку Схема данных.
-
На вкладке Конструктор связей в группе Связи щелкните Все связи. Будут отображены все таблицы со связями, а также соответствующие линии связи. Обратите внимание на то, что скрытые таблицы (таблицы, для которых установлен флажок скрытый в диалоговом окне Свойства) и их отношения не отображаются, если в диалоговом окне Параметры переходов не выбран параметр "Показывать скрытые объекты".
-
Щелкните линию отношения, которое вы хотите изменить. При выделении линия связи становится толще.
-
Дважды щелкните линию связи. Откроется диалоговое окно Изменение связей.
-
Выберите или отмените параметр Обеспечение целостности данных.
-
Внесите в отношение необходимые изменения и нажмите кнопку ОК.
В режиме обеспечения целостности данных действуют перечисленные ниже правила.
-
Не допускается ввод в поле внешнего ключа связанной таблицы значений, отсутствующих в поле первичного ключа главной таблицы, поскольку это приводит к появлению потерянных записей.
-
Не допускается удаление записи из главной таблицы, если в связанной таблице существуют связанные с ней записи. Например, невозможно удалить запись из таблицы "Сотрудники", если в таблице "Заказы" имеются заказы, относящиеся к данному сотруднику. Однако можно удалить главную запись и все связанные записи одним действием, установив флажок Каскадное удаление связанных записей.
-
Не допускается изменение значения первичного ключа в главной таблице, если это приведет к появлению потерянных записей. Например, нельзя изменить номер заказа в таблице "Заказы", если в таблице "Сведения о заказах" имеются строки, относящиеся к этому заказу. Однако можно обновить главную запись и все связанные записи одним действием, установив флажок "Каскадное обновление связанных полей".
Примечания: Если при включении обеспечения целостности данных возникли трудности, обратите внимание на то, что должны выполняться условия, перечисленные ниже.
-
Общее поле главной таблицы должно быть первичным ключом или иметь уникальный индекс.
-
Общие поля должны иметь одинаковый тип данных. Единственное исключение — поле типа "Счетчик" можно связать с полем типа "Числовой", если его свойство Размер поля имеет значение Длинное целое.
-
Обе таблицы находятся в одной Access базе данных. Обеспечение целостности данных нельзя включить для присоединенных таблиц. Однако если исходные таблицы имеют формат Access, можно открыть базу данных, в которой они хранятся, и включить целостность ссылок в этой базе данных.
-
Задание каскадных параметров
Иногда возникает ситуация, в которой требуется изменить значение только на стороне "один" отношения. В этом случае необходимо Access для автоматического обновления всех затронутых строк в рамках одной операции. Тогда обновление будет полностью завершено, а база данных не будет находиться в несогласованном состоянии, когда некоторые строки обновлены, а другие — нет. Access помогает избежать этой проблемы, поддерживая параметр Каскадный обновление связанных полей. Если вы применяете целостность ссылок и выбираете параметр Каскадное обновление связанных полей, а затем обновляете первичный ключ, Access автоматически обновляет все поля, которые ссылаются на первичный ключ.
Также может потребоваться удаление строки и всех связанных с ней записей — например, записи в таблице "Поставщики" и всех связанных с этим поставщиком заказов. По этой причине Access поддерживает параметр Каскадно удалить связанные записи. При принудительном применении целостности ссылок и выборе поля Каскадное удаление связанных записей проверка при удалении записи, содержащей первичный ключ, Access автоматически удаляет все записи, ссылающиеся на первичный ключ.
Включение и отключение каскадного обновления и каскадного удаления
-
На вкладке Работа с базами данных в группе Отношения нажмите кнопку Схема данных.
-
На вкладке Конструктор связей в группе Связи щелкните Все связи. Будут отображены все таблицы со связями, а также соответствующие линии связи. Обратите внимание на то, что скрытые таблицы (таблицы, для которых установлен флажок скрытый в диалоговом окне Свойства) и их отношения не отображаются, если в диалоговом окне Параметры переходов не выбран параметр "Показывать скрытые объекты".
-
Щелкните линию отношения, которое вы хотите изменить. При выделении линия связи становится толще.
-
Дважды щелкните линию связи. Откроется диалоговое окно Изменение связей.
-
Установите флажок Обеспечение целостности данных.
-
Установите флажок Каскадное обновление связанных полей, Каскадное удаление связанных записей или оба эти флажка.
-
Внесите в отношение необходимые изменения и нажмите кнопку ОК.
Примечание: Если первичным ключом является поле "Счетчик", установка флажка Каскадное обновление связанных полей не произведет никакого эффекта, поскольку изменить значение поля "Счетчик" нельзя.
Удаление отношения между таблицами
Важно: При удалении связи также отключается обеспечение целостности данных для этой связи, если оно было включено. В результате Access больше не будет автоматически препятствовать созданию потерянных записей на стороне отношения "многие".
Чтобы удалить отношение между таблицами, нужно удалить линию связи в окне "Схема данных". Установите указатель мыши на линию связи и щелкните ее. При выделении линия связи становится толще. Выделив линию связи, нажмите клавишу DEL.
-
На вкладке Работа с базами данных в группе Отношения нажмите кнопку Схема данных.
-
На вкладке Конструктор связей в группе Связи щелкните Все связи. Будут отображены все таблицы со связями, а также соответствующие линии связи. Обратите внимание на то, что скрытые таблицы (таблицы, для которых установлен флажок скрытый в диалоговом окне Свойства) и их отношения не отображаются, если в диалоговом окне Параметры переходов не выбран параметр "Показывать скрытые объекты".
-
Щелкните линию связи, которую требуется удалить. При выделении линия связи становится толще.
-
Нажмите клавишу DEL
-
Access может отобразиться сообщение Действительно ли вы хотите окончательно удалить выбранную связь из базы данных?. Если такое сообщение появляется, нажмите кнопку Да.
Примечание: Если одна из таблиц, участвующих в отношении, в данный момент используется (возможно, третьим лицом, процессом либо в открытом объекте базы данных, например в форме), удалить отношение между таблицами будет невозможно. Перед попыткой удаления отношения между таблицами закройте все открытые объекты, использующие эти таблицы.
См. также
Добавление поля подстановки в таблицу
Общие сведения об окне схемы данных
Сравнение двух таблиц в Access с целью выявления только совпадающих данных