- •Введение
- •Создание базы данных
- •1. Как создать таблицу
- •2. Ввод данных в таблицу
- •3. Как создать структуру таблицы с помощью конструктора
- •4. Как связать таблицы?
- •4.1. Связь таблиц с помощью схемы данных
- •4.2. Связь таблиц с помощью таблицы подстановки
- •5. Организация связи таблиц
- •6. Изменение параметров поля
- •7. Индексы
- •Задание
- •Запросы
- •1. Мастер запросов
- •2. Конструктор запросов
- •3. Условие отбора
- •4. Итоговый запрос
- •5. Запрос действия
- •6. Фильтры
- •7. Преобразование фильтра в запрос
- •1. Мастер форм
- •2. Конструктор форм
- •3. Элементы управления
- •4. Установка заголовков и примечаний
- •5. Эффективность применения элементов управления формы
- •1. Мастер отчетов
- •2. Конструктор отчетов
- •3. Группировка и сортировка
- •Вывод результатов
- •1. Предварительный просмотр
- •2. Печать таблиц и запросов
- •3. Файловые операции
- •Содержание
4. Как связать таблицы?
В предыдущих разделах вы познакомились с созданием структуры таблицы, как в режиме мастера, так и в режиме конструктора. Мы уже создали две таблицы: «Контакт» и «Описание контактов» и начали заполнять их данными. В этом разделе будет вестись речь о том, как осуществить взаимодействие таблиц, или иначе – как связать таблицы «Контакт» и «Описание контактов» между собой. Эта связь нужна, прежде всего, для того, чтобы не нарушалась целостность таблиц.
Например, если мы удалим какие-нибудь записи в таблице «Контакт», то для обеспечения целостности данных необходимо в таблице «Описание контактов» также удалить записи, на которые ссылались удаленные записи таблицы «Контакт». Даже в нашем случае, когда записей мало, это дело достаточно трудоемкое. Представьте себе, как вам придется потрудиться, если будут удалены несколько десятков записей!
С другой стороны, для заполнения поля Код_Контакт таблицы «Описание контактов» пользователь должен все время сверяться с соответствующим списком идентификаторов поля Код_Контакт таблицы «Контакт». Эта ситуация может доставить много неудобств пользователю и провоцировать возможность допущения ввода ошибочных сведений.
Чтобы избежать отмеченных выше недостатков в работе с базой данных, таблицы связывают между собой. Связь таблиц позволяет автоматически обеспечивать обновление и удаление связанных записей. Это, в свою очередь, позволяет сохранить целостность базы данных.
С формальной точки зрения базы данных, между отдельными таблицами которых существуют связи, называются реляционными (relation – отношение). Идея связывания данных в соответствии с их внутренними логическими взаимоотношениями, а не физическими указателями была выдвинута Е.Ф. Коддом еще в 1970 году. Благодаря такой взаимосвязи пользователи смогут комбинировать данные из разных источников, если логическая информация, необходимая для такого комбинирования, присутствует в исходных данных.
Программист, проектирующий базу данных, как правило, сталкивается с проблемой избыточности данных. Например, в таблице, которая содержит информацию о книгах библиотеки, один и тот же автор (например, А.С.Пушкин) может встретиться, по крайней мере, не один раз. Это не ошибка, т.к. в библиотеке может храниться не один десяток различных книг одного и того же автора. Если же потребуются вносить в таблицу еще и сведения об авторе, то таблица может «раздуться» до таких размеров, что просто не поместится на диске. Выход прост – нужно организовать еще одну таблицу, содержащую информацию об авторе.
Проблема избыточности в реляционных базах данных обусловлена существованием трех типов отношений между различными таблицами базы данных:
-
один—к—одному (1 к 1);
-
один—ко—многим (1 к * или 1 к ∞);
-
многие—ко—многим (* к * или ∞ к ∞).
Отношение один-к-одному означает, что между таблицами существует однозначное соответствие. Например, множество автомобилей и множество номеров. Здесь каждому автомобилю полагается иметь один номер, но конкретный номерной знак висит лишь на одном автомобиле. Если две таблицы находятся в отношении один—к—одному, то ключевое поле одной таблицы должно быть помещено и во вторую таблицу.
Отношение один-ко-многим определяет неоднозначностью между таблицами. Избыточность данных в данном случае устраняется организацией отдельной таблицы для каждого множества объектов. Например, владелец может иметь у себя несколько автомашин, однако для каждой автомашиной зарегистрирован только один владелец. Если две таблицы находятся в отношении один—ко—многим, то ключевое поле одной таблицы должно быть помещено и во вторую таблицу.
Отношение многие-ко-многим – самое сложное. Можно привести такой пример. С одной стороны, издательство печатает различные книги. С другой стороны, каждая книга может выпускаться несколькими конкурирующими издательствами. Избыточность данных в этом случае устраняется организацией третьей таблицы, которая устанавливает связи между записями первой и второй таблиц. Например, одна таблица содержит информацию о книгах, вторая – об издательствах, а третья – связывает коды издательств с кодами товаров (книг). Если две таблицы находятся в отношении многие—ко—многим, то требуется создать новую таблицу, содержащую ключевые поля обеих исходных таблиц.
Далее мы рассмотрим способы установки реляционной связи между таблицами базы данных.
