Связи между таблицами в базе данных
Современные базы данных обычно содержат большое количество взаимосвязанных таблиц, что позволяет избежать повторов. Например, крупные фирмы могут хранить сведения о магазинах в одной таблице, номенклатуру товаров, полученных этими магазинами в текущем месяце в другой таблице, а сведения об оптовых покупателях в третьей таблице. Access позволяет работать одновременно с несколькими таблицами, каждая из которых должна содержать записи, посвященные определенной теме. Связь между ними устанавливается по общим для нескольких таблиц полям, например, номера магазинов, через которые осуществляется реализация товара. Желательно, чтобы в одной из таблиц общее поле было ключевым. Если таблицы взаимосвязаны, то изменения, выполненные в записи одной таблицы, могут влиять на записи в другой таблице.
Для сохранения полноты и целостности данных Access накладывает определенные ограничения на ввод и редактирование данных, например, невозможно удалить запись из одной таблицы, если существуют связанные с ней записи в других таблицах.
Виды связей между таблицами
Реляционная база данных может содержать большое количество взаимосвязанных таблиц. Связи устанавливается между двумя общими полями (столбцами) двух таблиц. Связываемые поля могут иметь разные имена, но должны иметь одинаковый тип данных за исключением случая, когда поле первичного ключа является полем типа Счетчик. Поле счетчика связывается с числовым полем, если значения свойства Размер поля (FieldSize) обоих полей совпадают. Например, если свойство обоих полей имеет значение Длинное целое. Даже в том случае, когда связываются поля типа "Числовой", их свойства Размер поля (FieldSize) должны иметь одинаковые значения.
Задав связи между таблицами, можно создать запросы, формы и отчеты для отображения сведений, представленных в нескольких таблицах. Между двумя таблицами могут существовать следующие связи:
- один к одному – при таком типе связи одной записи в первой таблице соответствует только одна запись в другой таблице. В этом случае следует проверить возможность размещения всех записей в одной таблице. Однако в ряде случаев можно использовать несколько более простых таблиц. Соответствие записей устанавливается по полю, которое является первичным ключом в первой таблице, и полю, называемым внешним ключом другой таблицы;
- один ко многим – в этом случае запись одной таблицы может иметь несколько согласованных с ней записей в другой таблице. При этом каждая запись во второй таблице согласуется только с одной записью в первой таблице. Например, каждый покупатель может купить несколько товаров, но каждый проданный товар имеет только одного покупателя. Поле, содержащее первичный ключ новой таблицы, связывается с внешним ключом старой. Значения в поле с внешним ключом могут повторяться;
- многие к одному – любой записи таблицы, связь с которой мы рассматриваем, могут соответствовать несколько записей новой таблицы, но не наоборот. Фактически это отношение один ко многим, рассматриваемое, в обратном порядке. В этом случае ключевое поле новой таблицы является внешним ключом;
- многие ко многим – каждой записи из одной таблицы может соответствовать любое количество записей в другой таблице и наоборот. Например, каждый человек может звонить с нескольких телефонов. С другой стороны некоторыми телефонами могут пользоваться несколько человек. В этом случае поля, по которым устанавливается связь, являются внешними ключами. Они могут содержать повторяющиеся значения.
Математически такие связи можно записать 1:1, 1:т, т:1 и т:п. Более широкое распространение получили связи один ко многим, Например, один и тот же товар со склада может вывозиться в разные магазины, и одной записи в таблице Склад будет соответствовать несколько записей в таблице Магазины. Таблица Склад будет главной таблицей, а Магазины – связанной. В главной таблице для описания объекта используется одна запись. Избежать дублирования записей в этой таблице позволяет первичный ключ.
Две таблицы связывает общее поле, что позволяет объединить данные из двух таблиц для просмотра, редактирования или печати. Записи из таблиц, связанных с текущей таблицей, можно отображать в подтаблицах в пределах основной таблицы.
Связанная таблица – это таблица, которая сохраняется в файле, не принадлежащем открытой базе данных, однако, является доступной из Microsoft Access. Пользователь имеет возможность добавлять, удалять и изменять записи в связанной таблице, но не может изменять ее структуру. Для обеспечения целостности данных нельзя произвольно удалять или изменять связанные записи. Например, в таблицу Магазины можно включать только те записи, которые содержат сведения о товарах, поступивших со склада.
Использование ключевых полей для задания связи между таблицами
В большинстве случаев ключевое поле одной таблицы связывают с совпадающим полем (внешним ключом) другой таблицы. Внешний ключ – это одно или несколько полей (столбцов) в таблице, содержащих ссылку на поле или поля первичного ключа в другой таблице. Поле внешнего ключа определяет способ связывания таблиц – содержимое поля внешнего ключа должно совпадать с содержимым ключевого поля, хотя имена полей могут при этом не совпадать. Например, для связывания сотрудников с заказами, за которые они отвечают, следует создать между таблицами "Сотрудники" и "Заказы" связь с помощью полей "КодСотрудника". Таблица "Товары" в демонстрационной базе данных "Борей" содержит поле внешнего ключа "КодПоставщика", которое ссылается на ключевое поле "КодПоставщика" в таблице "Поставщики".
Внешний ключ может иметь значение Null; если внешний ключ состоит из нескольких полей, и хотя бы одно из них имеет значение Null, то все поля должны иметь значение Null.
Для установления отношения многие-ко-многим необходимо создать третью (связующую) таблицу и добавить в нее ключевые поля из обеих таблиц. Например, в демонстрационной базе данных Борей имеются таблицы Заказы и Товары. Заказ может включать несколько товаров, а товар входить в несколько заказов. Необходимо создать связующую таблицу (таблица Заказано, которая имеет связь с отношением "один-ко-многим" с каждой из таблиц Заказы и Товары.