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

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

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

   При этом для созданных таблиц необходимо установить связи, чтобы, например, по фамилии студента в таблице Студенты определить все записи с его оценками из таблицы Успеваемость. Связи между таблицами в БД используются при формировании запросов, создании отчетов или разработке форм. Как видно из таблиц 1 - 4, в разрабатываемой структуре данных существуют следующие взаимосвязи:

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

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


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

   После выполнения указанных действий на схеме данных будут расположены все таблицы БД Образование, расстановку которых можно изменить по своему усмотрению (рис. 2).


Рис. 2. Таблицы БД Образование на схеме данных

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

   В частности, необходимо связать таблицы Студенты и Успеваемость по полю КодСтудента таким образом, чтобы каждой записи из таблицы Студенты соответствовало несколько записей таблицы Успеваемость (т.к. у каждого студента может быть несколько оценок). Иначе говоря, между указанными таблицами нужно установить связь вида "один-ко-многим".

   Аналогичным образом нужно установить связь "один-ко-многим" по полю КодПредмета между таблицами Предметы и Успеваемость (т.к. по каждому предмету может быть несколько оценок, поставленных различным студентам).

   А также связь "один-к-одному" по полю КодПреподавателя между таблицами Предметы и Преподаватели, исходя из предположения, что каждый преподаватель ведет занятия только по одному предмету.

   Чтобы установить связь, например, по полю КодСтудента между таблицами Студенты и Успеваемость, необходимо выделить в окне Схема данных поле КодСтудента в таблице Студенты, с помощью мыши "перетащить" его изображение на поле КодСтудента таблицы Успеваемость, и затем отпустить кнопку мыши. При этом появится диалоговое окно Изменение связей, в котором для обеих таблиц должно быть указано поле КодСтудента (рис. 3).


Рис. 3. Диалоговое окно Изменение связей

   Если кнопка мыши была отпущена в тот момент, когда переносимое изображение находилось над другим полем, то в столбце Связанная таблица/запрос (таблица Успеваемость) будет отображено название этого поля. В подобном случае для изменения поля, по которому необходимо связать таблицы, можно закрыть окно Изменение связей и снова выполнить "перетаскивание" поля. Кроме этого, можно также выбрать название поля КодСтудента для таблицы Успеваемость в раскрывающемся списке полей, который можно отобразить, предварительно щелкнув в поле Связанная таблица/запрос окна Изменение связей.

    Для того чтобы в таблице Успеваемость не хранились оценки несуществующих студентов (т.е. записи, для которых значение поля КодСтудента не совпадает ни с одним из значений поля КодСтудента в таблице Студенты), следует в окне Изменение связей установить флажок Обеспечение целостности данных. После этого в таблицу Успеваемость невозможно будет ввести запись с таким значением поля КодСтудента, для которого нельзя будет найти соответствующую запись в таблице Студенты.

    Если установлен флажок Обеспечение целостности данных, то в окне Изменение связей автоматически становятся доступны еще два флажка:

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


Примечание. Тип отношения между связываемыми таблицами Access определяет автоматически. В данном случае, так как был установлен флажок Обеспечение целостности данных (рис. 3), то рядом с полем КодСтудента таблицы Студенты над линией связи отображается символ "1", а рядом с таблицей Успеваемость - символ бесконечности "" (т.е. установлена связь типа "один-ко-многим").


   Чтобы изменить установленную связь, необходимо выделить соответствующую линию, щелкнув по ней мышью. После этого связь можно удалить командой Правка | Удалить или с помощью клавиши Delete, а также изменить, вызвав окно Изменение связи командой Связи | Изменить связь или двойным щелчком на линии связи.

   После того как все связи между таблицами установлены, схема данных для БД Образование примет следующий вид (рис. 4).


Рис. 4. Итоговая схема данных для таблиц БД Образование

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

Действия по установке связей между таблицами БД Образование можно увидеть здесь, а взять клип здесь.

   При работе с БД, содержащими большое количество таблиц, бывает удобно отображать на схеме данных только определенную группу связанных таблиц. Например, для БД Образование необходимо на схеме данных отобразить только таблицу Студенты и таблицу, которая связана с ней (Успеваемость). Для этого следует очистить макет схемы данных кнопкой , добавить с помощью кнопки в схему данных таблицу Студенты и после этого отобразить на схеме все таблицы, с которыми она связана, с помощью команды Связи | Отобразить прямые связи или посредством кнопки Отобразить прямые связи . При этом на макете добавится таблица Успеваемость. С другой стороны, чтобы отобразить на схеме данных все таблицы, которые имеют хотя бы одну связь, можно воспользоваться командой Связи | Отобразить все или кнопкой Отобразить все связи . Для БД Образование в этом случае на схеме данных отобразятся все таблицы, так как каждая из них имеет хотя бы одну связь (рис. 4).

   Если требуется скрыть какую-либо таблицу на схеме данных, то для этого нужно щелкнуть на таблице и выбрать команду Связи | Скрыть таблицу.

    На следующем шаге вы познакомитесь с созданием индексов для одного поля таблицы базы данных.



Предыдущий шаг Содержание Следующий шаг