Краткий обзор Microsoft Office 2003

         

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


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

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


Реляционная база данных может содержать большое количество взаимосвязанных таблиц. Связи устанавливается между двумя общими полями (столбцами) двух таблиц. Связываемые поля могут иметь разные имена, но должны иметь одинаковый тип данных за исключением случая, когда поле первичного ключа является полем типа Счетчик. Поле счетчика связывается с числовым полем, если значения свойства Размер поля (FieldSize) обоих полей совпадают. Например, если свойство обоих полей имеет значение Длинное целое. Даже в том случае, когда связываются поля типа «Числовой», их свойства Размер поля (FieldSize) должны иметь одинаковые значения.
Задав связи между таблицами, можно создать запросы, формы и отчеты для отображения сведений, представленных в нескольких таблицах. Между двумя таблицами могут существовать следующие связи:

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


Математически такие связи можно записать 1:1, 1:т, т:1 и т:п. Более широкое распространение получили связи один ко многим, Например, один и тот же товар со склада может вывозиться в разные магазины, и одной записи в таблице Склад будет соответствовать несколько записей в таблице Магазины. Таблица Склад будет главной таблицей, а Магазины — связанной. В главной таблице для описания объекта используется одна запись. Избежать дублирования записей в этой таблице позволяет первичный ключ.
Две таблицы связывает общее поле, что позволяет объединить данные из двух таблиц для просмотра, редактирования или печати. Записи из таблиц, связанных с текущей таблицей, можно отображать в подтаблицах в пределах основной таблицы.
Связанная таблица — это таблица, которая сохраняется в файле, не принадлежащем открытой базе данных, однако, является доступной из Microsoft Access. Пользователь имеет возможность добавлять, удалять и изменять записи в связанной таблице, но не может изменять ее структуру. Для обеспечения целостности данных нельзя произвольно удалять или изменять связанные записи. Например, в таблицу Магазины можно включать только те записи, которые содержат сведения о товарах, поступивших со склада.

Использование ключевых полей для задания связи между таблицами


В большинстве случаев ключевое поле одной таблицы связывают с совпадающим полем (внешним ключом) другой таблицы. Внешний ключ — это одно или несколько полей (столбцов) в таблице, содержащих ссылку на поле или поля первичного ключа в другой таблице. Поле внешнего ключа определяет способ связывания таблиц — содержимое поля внешнего ключа должно совпадать с содержимым ключевого поля, хотя имена полей могут при этом не совпадать. Например, для связывания сотрудников с заказами, за которые они отвечают, следует создать между таблицами «Сотрудники» и «Заказы» связь с помощью полей «КодСотрудника». Таблица «Товары» в демонстрационной базе данных «Борей» содержит поле внешнего ключа «КодПоставщика», которое ссылается на ключевое поле «КодПоставщика» в таблице «Поставщики».
Внешний ключ может иметь значение Null; если внешний ключ состоит из нескольких полей, и хотя бы одно из них имеет значение Null, то все поля должны иметь значение Null.
Для установления отношения многие-ко-многим необходимо создать третью (связующую) таблицу и добавить в нее ключевые поля из обеих таблиц. Например, в демонстрационной базе данных Борей имеются таблицы Заказы и Товары. Заказ может включать несколько товаров, а товар входить в несколько заказов. Необходимо создать связующую таблицу (таблица Заказано, которая имеет связь с отношением «один-ко-многим» с каждой из таблиц Заказы и Товары.

Схема данных


Для управления базой данных используются связи между таблицами.
Если между таблицами базы данных связи не были заданы, откроется диалоговое окно Добавление таблицы (Show Table). Выберите в окне требуемые таблицы и запросы и нажмите кнопку Добавить (Add). Они отобразятся в окне Схема данных (Relationships) .
На рис. 23.21 показаны линии связи между таблицами учебной базы данных, поставляемой с Access. В каждом небольшом окне отображены списки полей одной из таблиц. Ключевые поля выделено жирным шрифтом. Таблицы, не



Рис. 23.21 Линии связи между таблицами базы данных имеющие первичных ключей, невозможно связать и в окне Схема данных они не отображаются.

Символы на линиях связи показывают тип связи. Символ бесконечности используется для обозначения «много», и если мы видим на одной линии связи символы единицы и бесконечности, то между таблицами существует связь один ко многим. Можно связывать поля с разными именами, а также запросы с таблицами или запросами (см. главу 24).
Кнопки панели инструментов Отобразить прямые связи (Show Direct Relationships) и Отобразить все (Show All Relationships) позволяют показать схему прямых связей только одной таблицы или схемы связей всех таблиц в базе данных.



Рис. 23.22 Диалоговое окно Добавление таблицы

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


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

  •  закройте все таблицы и формы;
  •  в окне базы данных выберите команду Схема данных (Relationships) в меню Сервис (Tools) или нажмите одноименную кнопку на панели инструментов;
  •  если в окне Схема данных (Relationships) будет представлена какая-либо информация, то нажмите сначала кнопку Очистить макет (Clear Layout), а затем кнопку Да (Yes) , чтобы продолжить выполнение намеченной операции;
  •  в меню Связи (Relationships) выберите команду Добавить таблицу (Show Table) или нажмите одноименную кнопку на панели инструментов;
  •  в диалоговом окне Добавление таблицы (Show Table) на вкладке Таблицы (Tables) выделите требуемую таблицу и нажмите кнопку Добавить (Add) или дважды щелкните имя этой таблицы (рис. 23.22);
  •  в окне Схема данных (Relationships) отобразится список полей выбранной таблицы с выделенным полем ключа;
  •  в диалоговом окне Добавление таблицы (Show Table) выделите таблицу, с которой устанавливается взаимосвязь и нажмите кнопку Добавить (Add);
  •  в окне Схема данных (Relationships) перетащите ключевое поле из списка главной таблицы в список связанной таблицы.


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

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


Для изменения связи между таблицами, выберите в меню Связи (Relationships) команду Изменить связь (Edit Relationship) . В диалоговом окне Изменение связей (Edit Relationship) нажмите кнопку Новое (Create) , чтобы создать связь (рис. 23.23).



Рис. 23.23 Изменение связей между таблицами

Чтобы изменить существующую связь, дважды щелкните ее мышью.
Чтобы связать совпадающие поля в главной и связанной таблицах, щелкните, пустую верхнюю ячейку в столбце Таблица/Запрос (Table/Query). В этой ячейке появится кнопка со стрелкой, открывающая список. Выделите в списке совпадающее поле. Затем щелкните, пустую верхнюю ячейку в столбце Связанной таблица/запрос (Related Table/Query) и выберите имя требуемого поля.
После того, как связь между таблицами установлена, их поля можно объединить в запросе, форме или отчете.

Целостность данных


Чтобы поддерживать связи между записями в связанных таблицах, и обеспечить защиту от случайного удаления или, изменения связанных данных используется ряд правил, который обеспечивает целостность данных. Целостность данных позволяет предотвратить появление несвязанных записей. Обе взаимосвязанные таблицы должны принадлежать одной базе данных Access.
Связанные поля должны иметь один тип данных. Два исключения сделаны для поля счетчика: оно может быть связано с числовым полем, свойство которого Размер поля (FieldSize) имеет значение Длинное целое. Кроме того, поле счетчика, свойство Размер поля (FieldSize) которого имеет значение Код репликации, можно связать с числовым полем, если свойство Размер поля (FieldSize) имеет значение Код репликации.
Для установки целостности данных база данных, в которой находятся таблицы, должна быть открыта. Для связанных таблиц из баз данных других форматов установить целостность данных невозможно.
Для поддержания целостности данных в связанных таблицах при обновлении или удалении записи в главной таблице, обеспечивается каскадное обновление или удаление всех связанных записей в подчиненной таблице или таблицах.


Содержание раздела