Создание баз данных Access: Учебное пособие, страница 9

   В создаваемой БД такая связь существует между таблицами РАЗДЕЛЫ и КНИГИ, так как к одному и тому же разделу может относиться множество книг.

   Отношение «многие-ко~многим»

   При отношении «многие-ко-многим» одной записи в таблице А могут соот­ветствовать несколько записей в таблице В, а одной записи в таблице В - несколь­ко записей в таблице А. Такая схема реализуется только с помощью третьей свя­зывающей таблицы, ключ которой состоит, по крайней мере, из двух полей, кото­рые являются полями первичных ключей в таблицах А и В. Таблицы А и В связы­ваются с этой таблицей отношением «один-ко-многим».

   Так, например, в создаваемой БД между таблицами АВТОРЫ и КНИГИ, существует отношение «многие-ко-многим», так как у одного автора может быть несколько книг, а у одной книги может быть несколько авторов. Для установления этой связи введена связующая таблица КНИГИАВТОРЫ, с которой каждая из двух таблиц должна быть связана отношением «один-ко-многим».

   Отношение «многие-ко-многим» существует также между таблицами КЛИ­ЕНТЫ и КНИГИ, так как один клиент может купить несколько разных книг, а ка­ждая книга может быть куплена разными клиентами. Эта связь устанавливается с помощью таблицы ПОКУПКИ, с которой каждая из двух таблиц также связывает­ся отношением «один-ко-многим».

   Отношение «один-к-одному»

   При отношении «один-к-одному» каждая запись в таблице А может иметь не более одной связанной записи в таблице В и наоборот. Этот тип связи исполь­зуют не очень часто, поскольку такие данные могут быть помещены в одну табли­цу. Связь с отношением «один-к-одному» используют для разделения очень широ­ких таблиц, для отделения части таблицы по соображениям защиты, а также для сохранения сведений, относящихся к подмножеству записей в главной таблице.

Установление связей

   В Microsoft Access связываемые поля не обязательно должны иметь одина­ковые имена, но они должны иметь одинаковые типы данных и одинаковый  смысл. Кроме того, связываемые поля числового типа должны иметь одинаковые значения свойства Размер поля.

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

   Перед установлением связей необходимо закрыть все открытые таблицы. Создавать или изменять связи между открытыми таблицами нельзя.

   Связи между таблицами определяются в окне Схема данных. Это окно можно открыть из окна БД, нажав кнопку Схема данных на панели инструментов или выбрав команду Схема данныхиз контекстного меню. Контекстное меню вы­зывается щелчком правой кнопки мыши. Если в базе данных не определено ника­ких связей, то на экран автоматически будет выведено окно Добавление таблицы, в котором нужно выбрать таблицы или запросы для отображения их в схеме дан­ных.

   Если это окно не выводится автоматически, то надо щелкнуть правой кноп­кой мыши и из контекстного меню выбрать команду Добавить таблицуили на­жать кнопку Добавить таблицу на панели инструментов.

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

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

   В диалоговом окне Связи можно установить несколько флажков.

   Флажок Обеспечение целостности данныхне позволит добавить в подчи­ненную таблицу, находящуюся на стороне отношения "многие", запись с непра­вильным кодом. Access также не разрешит удалить из "родительской" таблицы, находящейся на стороне отношения "один", запись, для которой имеются связан­ные записи в подчиненной таблице.

   После установления флажка Обеспечения целостности Access делает дос­тупными еще два флажка: Каскадное обновление связанных палей и Каскадное удаление связанных записей. При установлении первого из флажков Access будет обновлять значения внешних ключей в подчиненной таблице при изменении значения первичного ключа в родительской таблице. Установленный второй флажок означает, что при удалении строки из родительской таблицы будут удалены все дочерние строки.

   После установления флажков тип связи будет определен, и на схеме появят­ся соответствующие изображения.

   При закрытии окна схемы данных на экран будет выведено сообщение, нужно ли сохранять макет схемы. Независимо от того, будет он сохранен или нет, связи, созданные в базе данных, будут сохранены.

   Макет связей можно в любой момент просмотреть, перейдя в окно БД и на­жав кнопку Схема данных на панели инструментов.

   С помощью кнопки Очистить макет можно очистить окно Схема данных. Установленные связи при этом не разрушатся.

   Можно устанавливать связи и между не ключевыми полями таблиц. В этом случае создается неопределенное отношение. Access по умолчанию создает линию объединения между таблицами, но условия целостности данных при этом не на­кладываются и нет гарантии уникальности записей в любой из таблиц.

   Для связывания таблицы самой с собой или для связывания поля таблицы с другим полем той же таблицы следует дважды добавить таблицу. Такая ситуация возникает при определении поля с подстановкой значений из той же таблицы.