Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Создание базы данных в Access.doc
Скачиваний:
3
Добавлен:
27.10.2018
Размер:
2 Мб
Скачать
☆

4. Как связать таблицы?

В предыдущих разделах вы познакомились с созданием структуры таблицы, как в режиме мастера, так и в режиме конструктора. Мы уже создали две таблицы: «Контакт» и «Описание контактов» и начали заполнять их данными. В этом разделе будет вестись речь о том, как осуществить взаимодействие таблиц, или иначе – как связать таблицы «Контакт» и «Описание контактов» между собой. Эта связь нужна, прежде всего, для того, чтобы не нарушалась целостность таблиц.

Например, если мы удалим какие-нибудь записи в таблице «Контакт», то для обеспечения целостности данных необходимо в таблице «Описание контактов» также удалить записи, на которые ссылались удаленные записи таблицы «Контакт». Даже в нашем случае, когда записей мало, это дело достаточно трудоемкое. Представьте себе, как вам придется потрудиться, если будут удалены несколько десятков записей!

С другой стороны, для заполнения поля Код_Контакт таблицы «Описание контактов» пользователь должен все время сверяться с соответствующим списком идентификаторов поля Код_Контакт таблицы «Контакт». Эта ситуация может доставить много неудобств пользователю и провоцировать возможность допущения ввода ошибочных сведений.

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

С формальной точки зрения базы данных, между отдельными таблицами которых существуют связи, называются реляционными (relation – отношение). Идея связывания данных в соответствии с их внутренними логическими взаимоотношениями, а не физическими указателями была выдвинута Е.Ф. Коддом еще в 1970 году. Благодаря такой взаимосвязи пользователи смогут комбинировать данные из разных источников, если логическая информация, необходимая для такого комбинирования, присутствует в исходных данных.

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

Проблема избыточности в реляционных базах данных обусловлена существованием трех типов отношений между различными таблицами базы данных:

  • один—к—одному (1 к 1);

  • один—ко—многим (1 к * или 1 к ∞);

  • многие—ко—многим (* к * или ∞ к ∞).

Отношение один-к-одному означает, что между таблицами существует однозначное соответствие. Например, множество автомобилей и множество номеров. Здесь каждому автомобилю полагается иметь один номер, но конкретный номерной знак висит лишь на одном автомобиле. Если две таблицы находятся в отношении один—к—одному, то ключевое поле одной таблицы должно быть помещено и во вторую таблицу.

Отношение один-ко-многим определяет неоднозначностью между таблицами. Избыточность данных в данном случае устраняется организацией отдельной таблицы для каждого множества объектов. Например, владелец может иметь у себя несколько автомашин, однако для каждой автомашиной зарегистрирован только один владелец. Если две таблицы находятся в отношении один—ко—многим, то ключевое поле одной таблицы должно быть помещено и во вторую таблицу.

Отношение многие-ко-многим – самое сложное. Можно привести такой пример. С одной стороны, издательство печатает различные книги. С другой стороны, каждая книга может выпускаться несколькими конкурирующими издательствами. Избыточность данных в этом случае устраняется организацией третьей таблицы, которая устанавливает связи между записями первой и второй таблиц. Например, одна таблица содержит информацию о книгах, вторая – об издательствах, а третья – связывает коды издательств с кодами товаров (книг). Если две таблицы находятся в отношении многие—ко—многим, то требуется создать новую таблицу, содержащую ключевые поля обеих исходных таблиц.

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