Одной из целей создания хорошей структуры базы данных является устранение избыточности (повторения) данных. Для этого нужно распределить данные по нескольким отдельным тематически организованным таблицам, чтобы каждый факт был представлен один раз. Затем вы предоставляете Access способ объединения разделенных сведений. Это можно сделать, разместив общие поля в связанных таблицах. Чтобы корректно выполнить это действие, нужно понять взаимосвязи между таблицами и описать эти взаимосвязи в базе данных.
В этой статье
Введение
После создания таблицы для каждого субъекта в базе данных необходимо предоставить Access способ повторного объединения этих сведений. Это делается путем создания общих полей в связанных таблицах и настройки связей между таблицами. После этого можно создавать запросы, формы и отчеты, одновременно отображающие сведения из нескольких таблиц. Например, приведенная ниже форма содержит сведения из нескольких таблиц:
1. Эта форма содержит данные из таблицы клиентов,
2. заказов,
3. товаров
4. и сведений о заказах.
Имя клиента в поле Плательщик получено из таблицы "Клиенты", значения кода заказа и даты заказа — из таблицы "Заказы", наименование товара — из таблицы "Товары", а цена и количество — из таблицы "Заказано". Чтобы можно было передать данные в форму, эти таблицы связаны друг с другом несколькими способами.
В приведенном примере поля в таблицах должны быть согласованы таким образом, чтобы отображать сведения об одном и том же заказе. Это согласование осуществляется путем установления связей между таблицами. Связь между таблицами устанавливает отношения между значениями в ключевых полях — часто между полями, имеющими одинаковые имена в обеих таблицах. В большинстве случаев с первичным ключом одной таблицы, являющимся уникальным идентификатором каждой записи, связывается внешний ключ другой таблицы. Например, для связывания сотрудников с заказами, за которые они отвечают, можно создать связь между полями "Код сотрудника" в таблицах "Сотрудники" и "Заказы".
1. Поле "Код сотрудника" отображается в двух таблицах: как первичный ключ...
2. и как внешний ключ.
Типы связей между таблицами
Существует три типа связей таблиц в Access.
-
Связь "один-ко-многим"
Давайте используем базу данных отслеживания заказов, которая включает в себя таблицу Customers и таблицу Orders в качестве примера. Клиент может разместить любое количество заказов. Следовательно, у любого клиента, представленного в таблице "Клиенты", может быть много заказов, представленных в таблице "Заказы". Поэтому связь между таблицами "Клиенты" и "Заказы" — это отношение "один-ко-многим".
Чтобы создать отношение "один-ко-многим" в структуре базы данных, добавьте первичный ключ на стороне "один" в таблицу на стороне "многие" в виде дополнительного поля или полей. В данном примере необходимо добавить новое поле — поле "Код" из таблицы "Клиенты" — в таблицу "Заказы" и назвать его "Код клиента". Access затем можно использовать идентификатор клиента в таблице Заказы, чтобы найти правильного клиента для каждого заказа.
-
Связь "многие-ко-многим"
Теперь рассмотрим связь между таблицей Products и таблицей Orders. Отдельный заказ может включать несколько товаров. С другой стороны, один товар может входить в несколько заказов. Таким образом, для каждой записи в таблице "Заказы" может существовать несколько записей в таблицы "Товары". Таким образом, для каждой записи в таблице "Заказы" может существовать несколько записей в таблице "Заказы". Эта связь называется отношением "многие-ко-многим". Обратите внимание, что для определения существующей схемы отношений "многие ко многим" между вашими таблицами, очень важно рассматривать обе стороны отношений.
Чтобы представить связь "многие-ко-многим", нужно создать третью (связующую) таблицу, в которой она разбивается на две связи "один-ко-многим". Первичные ключи двух таблиц вставляются в третью таблицу. В результате в третьей таблице сохраняются все экземпляры связи. Например, таблицы "Заказы" и "Продукты" имеют связь "многие-ко-многим", определяемую путем создания двух связей "один-ко-многим" в таблице "Заказано". В одном заказе может быть много продуктов, и каждый продукт может быть указан во многих заказах.
-
Связь "один-к-одному"
При отношении "один-к-одному" каждая запись в первой таблице может иметь не более одной связанной записи во второй таблице, и наоборот. Отношения этого типа используются нечасто, поскольку обычно сведения, связанные таким образом, хранятся в одной таблице. Отношение "один-к-одному" используется для разделения таблицы, содержащей много полей, с целью отделения части таблицы по соображениям безопасности, а также с целью сохранения сведений, относящихся к подмножеству записей в главной таблице. После определения такого отношения у обеих таблиц должно быть общее поле.
Зачем создавать связи между таблицами?
Связи между таблицами можно создать непосредственно с помощью окна "Схема данных" или путем перетаскивания поля из области Список полей. Access использует связи таблиц, чтобы решить, как объединять таблицы, когда необходимо использовать их в объекте базы данных. Существует несколько причин для создания связей между таблицами перед созданием других объектов базы данных (форм, запросов, отчетов).
-
Связи между таблицами предоставляют сведения для структурирования запросов
Для работы с записями из нескольких таблиц часто приходится создавать запросы, соединяющие таблицы. Запрос сопоставляет значения в поле первичного ключа первой таблицы с полем внешнего ключа второй таблицы. Например, чтобы получить строки, в которых перечисляются все заказы для каждого из клиентов, можно создать запрос, соединяющий таблицу "Клиенты" с таблицей "Заказы" на основе поля "Код клиента". В окне "Схема данных" можно вручную указать поля для соединения. Но если между таблицами уже определена связь, Access предоставляет соединение по умолчанию на основе существующего отношения таблицы. Кроме того, если вы используете один из мастеров запросов, Access использует сведения, собранные из уже определенных связей таблиц, чтобы предоставить вам информированные варианты и предварительно заполнить параметры свойств соответствующими значениями по умолчанию.
-
Связи между таблицами предоставляют сведения для структурирования форм и отчетов
При разработке формы или отчета Access использует сведения, собранные из уже определенных связей таблиц, чтобы представить вам информированные варианты и предварительно заполнить параметры свойств соответствующими значениями по умолчанию.
-
Связи между таблицами — это та основа, с помощью которой можно обеспечить целостность данных, чтобы в базе данных не было потерянных записей. Потерянная запись — это запись со ссылкой на несуществующую запись (например, запись заказа со ссылкой на отсутствующую запись клиента).
При создании базы данных сведения распределяются по таблицам, в каждой из которых есть первичный ключ. После этого к связанным таблицам добавляются внешние ключи, имеющие ссылки на первичные ключи. Эти пары из внешнего и первичного ключей формируют основу для связей между таблицами и многотабличных запросов. Важно, чтобы эти ссылки на внешний ключ-первичный ключ оставались синхронизированными. Целостность данных, которая зависит от связей в таблице, гарантирует, что ссылки остаются синхронизированными.
Понятие о целостности данных
При создании базы данных сведения распределяются по множеству тематически организованных таблиц, чтобы свести к минимуму избыточность данных. Затем вы предоставляете Access способ объединения данных, помещая общие поля в связанные таблицы. Например, чтобы создать связь "один-ко-многим", добавьте первичный ключ из таблицы на стороне "один" как дополнительное поле в таблицу на стороне "многие". Чтобы объединить данные, Access принимает значение в таблице "многие" и ищет соответствующее значение в таблице "один". Таким образом, значения таблицы на стороне "многие" связаны с соответствующими значениями на стороне "один".
Предположим, между таблицами "Грузоотправители" и "Заказы" существует связь "один-ко-многим", и нужно удалить грузоотправителя. Если у грузоотправителя, которого нужно удалить, есть заказы в таблице "Заказы, они станут потерянными записями после удаления записи грузоотправителя. В таблице "Заказы" останется код грузоотправителя, но он будет недействителен, поскольку запись, на которую он ссылается, уже не существует.
Задача сохранения целостности данных состоит в предотвращении появления потерянных записей и поддержании ссылок в синхронизированном состоянии, чтобы описанная выше гипотетическая ситуация никогда не возникла.
Обеспечение целостности данных включается для конкретного отношения между таблицами. После принудительного применения Access отклоняет любую операцию, которая нарушает целостность ссылок для этой связи таблицы. Это означает, что Access отклонит как обновления, изменяющие целевой объект ссылки, так и удаления, которые удаляют целевой объект ссылки. Возможно, у вас может возникнуть вполне допустимая необходимость изменить первичный ключ для отправителя, у которого есть заказы в таблице Orders. В таких случаях вам действительно нужно, чтобы Access автоматически обновляли все обработанные строки в рамках одной операции. Таким образом, Access гарантирует, что обновление будет завершено в полном объеме, чтобы база данных не осталась в несогласованном состоянии, при этом некоторые строки были обновлены, а некоторые — нет. По этой причине Access поддерживает параметр Каскадные обновления связанных полей . Если вы применяете целостность ссылок и выбираете параметр Каскадное обновление связанных полей , а затем обновляете первичный ключ, Access автоматически обновляет все поля, которые ссылаются на первичный ключ.
Может понадобиться удалить строку и все связанные записи — например, запись грузоотправителя и все связанные с ним заказы. По этой причине Access поддерживает параметр Каскадно удалить связанные записи . Если вы применяете целостность ссылок и выбираете параметр Каскадное удаление связанных записей , а затем удаляете запись на стороне первичного ключа связи, Access автоматически удаляет все записи, ссылающиеся на первичный ключ.
Просмотр связей между таблицами
Чтобы просмотреть межтабличные связи, щелкните Схема данных на вкладке Работа с базами данных. Откроется окно "Схема данных", в котором будут отображены все существующие связи. Если связи между таблицами не определены и вы впервые открываете окно "Связи", Access предложит добавить таблицу или запрос в это окно.
Вызов окна "Схема данных"
-
Щелкните Файл, нажмите кнопку Открыть, а затем выберите и откройте базу данных.
-
На вкладке Работа с базами данных в группе Отношения нажмите кнопку Схема данных.
-
На вкладке Конструктор связей в группе Связи щелкните Все связи.При этом отображаются все определенные связи в базе данных. Обратите внимание на то, что скрытые таблицы (таблицы, для которых установлен флажок скрытый в диалоговом окне Свойства) и их отношения не отображаются, если в диалоговом окне Параметры переходов не выбран параметр Показывать скрытые объекты.
Связь между таблицами представляется как линия между таблицами в окне "Схема данных". Связь, не обеспечивающая целостность данных, отображается как тонкая линия между общими полями, поддерживающими связь. Если выбрать связь, щелкнув линию, то линия станет жирной. Если обеспечить целостность данных для этой связи, линия станет толще на концах. Кроме того, над жирной частью линии с одной стороны связи будет отображаться цифра 1, а с другой стороны — символ бесконечности (∞).
Когда открыто окно "Схема данных", на ленте доступны указанные ниже команды.
На вкладке Конструктор связей в группе Инструменты :
-
Изменить связи . Открывает диалоговое окно Изменение связей . При выборе линии связи можно щелкнуть элемент Изменить связи, чтобы изменить связь между таблицами. Можно также дважды щелкнуть линию связи.
-
Очистить макет . Запрещает отображение всех таблиц и связей в окне "Схема данных". Имейте в виду, что эта команда только скрывает таблицы и связи, но не удаляет их.
-
Отчет о связях . Создает отчет, отображающий таблицы и связи базы данных. В отчете отображаются только таблицы и связи, не скрытые в окне "Схема данных".
На вкладке Конструктор связей в группе Связи :
-
Добавление таблиц Позволяет выбрать таблицы для отображения в окне Связи.
-
Скрыть таблицу . Скрывает выбранную таблицу в окне "Схема данных".
-
Прямые связи . Отображает все связи и связанные таблицы для выбранной таблицы в окне "Схема данных", если они еще не отображены.
-
Все связи . Отображает все связи и связанные таблицы базы данных в окне "Схема данных". Имейте в виду, что скрытые таблицы (таблицы, для которых установлен флажок Скрытый в диалоговом окне Свойства) и их связи не будут отображены, если не установлен флажок "Показывать скрытые объекты" в диалоговом окне "Параметры переходов".
-
Закрыть . Закрывает окно "Схема данных". Если в макет окна "Схема данных" были внесены какие-либо изменения, будет предложено сохранить их.