Цель изучения темы: научиться выбирать ключевые поля для таблиц, освоить методику установки связей между таблицами и осуществлять их корректировку.
6.1. Правила установки связей между таблицамиAccess 2010 даёт возможность организовывать и отображать межтабличные связи двумя способами: непосредственно связей между таблицами и создание вложенных таблиц данных. В Access 2010 система самостоятельно устанавливает связи между таблицами, если в таблицах уже установлены ключевые поля.
Для создания связей необходимо установить соответствие величин одной таблицы величинам из другой таблицы. Связи устанавливаются через определяемые пользователем поля. Для этого связывают ключевое поле родительской таблицы (внешний ключ) с соответствующим ему полем дочерней таблицы. Эти поля в таблицах часто имеют одинаковые имена, но в общем случае это не обязательно. Строго обязательными являются следующие условия.
- В одной или в обеих таблицах должно быть поле, содержащее уникальные (не имеющие повторений) значения во всех записях, это и есть первичный ключ.
- Связываемые поля должны иметь одинаковые типы данных, кроме исключений из этого правила:
6.2. Установка первичного ключа в таблице- Связываемые поля Числового типа должны иметь одинаковые значения свойства Размер поля.
- Для полей, содержащие данные типа OLE и MEMO, первичный ключ назначить невозможно.
В сбалансированной структуре реляционной базы данных каждая запись в любой
таблице должна уникально идентифицироваться, т.е. значения некоторых полей в
таблице не должны повторяться во всём множестве записей. Этот уникальный
идентификатор называется первичным ключом .
Как вы заметили, после создания таблиц в Access 2010 в режиме
Конструктор, при выполнении операций «Закрыть» или «Сохранить», система делает
напоминание:
.
В том случае, если нажать на кнопку «Нет», то ключевого поля система создавать
не будет (в рассмотренных примерах дано объяснение, почему удобнее ключ
устанавливать позже). При создании таблицы в режиме Таблица, система
автоматически создаёт первое поле, которое называется «Код» с типом данных
«Счётчик». Это поле является ключевым, например, на рисунке 60 показан вариант
создаваемой таблицы вручную, при вводе данных в поле «Стаж…» система
автоматически в поле «Код» устанавливает порядковые номера записей, а после
закрытия таблицы поле «Код» становится ключевым.
Рис. 60. Пример созданной таблицы в режиме Таблица
В том случае, если ключевое поле не было установлено в таблице, то понадобится установить ключ самостоятельно (в рассматриваемых примерах, для таблиц «Личные сведения» и «Доплаты» ключи не устанавливались). Для добавления первичного ключа к таблице или для его удаления, необходимо таблицу открыть в режиме Конструктор. Рассмотрим на примере правила создания первичного ключа.
Понятно, что убрать ключ из таблицы можно выполнив те же действия. Проверьте,
существуют ли ключи в других таблицах, которые были созданы на предыдущих этапах
(«Надбавка за стаж», «Номенклатура должностей» и «Доплаты»). Если в режиме
Конструктор попытаться открыть таблицу, ,
которая является связанной с внешним файлом, то система выдаст сообщение, текст
которого представлен на рисунке 61.
Рис. 61. Сообщение системы о том, что даненая таблица является связанной
Для
отображения, корректировки и удаления связей между таблицами
в Access предложено прекрасное визуальное средство – Схема данных. Для
того, чтобы увидеть, какие связи между таблицами существуют, достаточно закрыть
все таблицы, активизировать вкладку «Работа с базами данных», а затем нажать на
пиктограмму «Схема данных», которая показана в начале раздела слева. Часто
разработчик базы данных изменяет наименования ключевых полей, что потребует от
него проведения операции создания связи вручную или её удаление. В некоторых
версиях Access 2010 система не создаёт связей. Поэтому, полезно
ознакомиться с последовательностью установления связей вручную.
Рис. 62. Пример добавления таблиц на поле «Схема данных»
Рис. 63. Окно для установления параметров связей между таблицами
Почему при установлении связей между таблицами не обязательно ставить пометки в полях «Каскадное обновление связанных полей» и «Каскадное удаление связанных полей»? Это естественный вопрос, тем не менее, обратите внимание, если использовать в качестве связываемых полей поле «Счётчик», то это поле невозможно видоизменить пользователем, следовательно, нет смысла ставить в этом случае пометку (напомним, что при установлении ключевого поля «Текстовое», пользователь имеет возможность видоизменять данные в этом поле, например заменить фамилию.). «Каскадное удаление связанных записей» используется для того, чтобы при удалении записи из одной таблицы, в запросах или других связанных таблицах, данные помеченного поля так же будут удаляться.
При попытке создать связь между таблицами «Надбавки за стаж» и «Личные
сведения» ничего не получится. Ответ ясен, в таблице «Личные сведения»
отсутствует поле, которое можно связать с таблицей «Надбавки за стаж». Выходов
из положения два. Первый способ – создать поле в таблице «Личные сведения»,
например, используя приём связанных таблиц, а затем из списка выбрать
необходимые данные для заполнения вновь созданного поля. Второй способ –
воспользоваться промежуточной таблицей, например, которая будет создана в
запросе, этот приём довольно трудоёмкий, но позволяет наращивать базу данных
новыми таблицами, а затем использовать их для выполнения вычислений в запросах
(этот способ будет рассмотрен ниже). Создадим в таблице «Личные сведения» новое
поле, например, «Стаж». Создание вложенных таблиц уже обсуждалось. Напомним, что
сначала необходимо определить место нового поля в таблице, затем выбрать режим
,
далее -
,
а затем выполнить шаги по подстановки необходимого поля в виде списка из другой
таблицы. В результате выполняемых действий будет получена связь между таблицами
«Надбавка за стаж» (Родительская) и «Личные сведения» (Дочерняя). На рисунке 64
показан пример автоматического установления связей между таблицами, когда
используется метод вложения таблиц. Когда будет раскрыта таблица «Надбавки за
стаж», то в ней появляется символ . Если кликнуть по символу
,
то будут отображены строки (записи) из дочерней таблицы (в данном примере
показаны записи со сведениями о сотрудниках, которые имеют стаж работы от 1 года
до 3-х лет).
Рис. 64. Пример установления связей между таблицами методом вложения таблиц
Автоматически созданная связь отображает отношение «Один ко многим», действительно, в таблице «Надбавки за стаж» каждая строка является уникальной, в то время как в таблице «Личные сведения» данные о стаже работы сотрудника могут относиться к нескольким строкам.
Для того, чтобы увидеть, какие связи между таблицами существуют, достаточно закрыть все таблицы, активизировать вкладку «Работа с базами данных», а затем нажать на пиктограмму «Схема данных». Часто разработчик базы данных изменяет наименования ключевых полей, что потребует от него проведения операции создания связи вручную или её удаление. На рисунке 65 показана схема связей для рассматриваемого примера.
Рис. 65. Вариант сформированных связей между таблицами в базе данных