Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие БД_практикум Access.doc
Скачиваний:
37
Добавлен:
16.03.2015
Размер:
7.34 Mб
Скачать

1.4 Связи между таблицами

Создание связей между таблицами – последний этап физического проектирования БД. Связь между таблицами устанавливает отношение между совпадающими значениями в ключевых полях. В большинстве случаев связывают первичный ключ главной таблицы с внешним ключом подчинённой таблицы (часто имеющим то же имя).

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

Связи между отношениями на уровне БД могут иметь один из трех видов:

  1. Один-к-одному. Одной записи базового отношения соответствует одна запись в подчинённой таблице, и наоборот. Этот тип связи применяется достаточно редко. Единственный случай, когда применение этого типа связи оправданно – разбиение таблицы, содержащей большое количество полей, на несколько вспомогательных таблиц. Например, значения атрибута Должность храниться в отдельной таблице-справочнике с конкретизацией по другим дополнительным атрибутам.

  2. Один-ко-многим. Одной записи базового отношения соответствует несколько или ни одной записи в подчинённой таблице. В свою очередь каждой записи подчиненной таблицы может соответствовать только одна запись базового отношения. Наиболее употребительный вид связи. На рисунке 3 представлен пример такой связи между подчиненной таблицей Сотрудники и базовыми отношениями Должности и Оклады по атрибутам Должность и Оклад.

Рисунок 3 – Связанные таблицы

  1. Многие-ко-многим. При этом типе связи многим записям базового отношения может соответствовать много записей в подчинённой таблице (и наоборот). В таблице 4 приведён вариант должностного совмещения внутри предприятия. Из табличных данных следует, что кадровый работник может быть сотрудником разных подразделений одного предприятия. Такую связь в MS Access можно организовать только при помощи третьей вспомогательной таблицы. По сути, связь «многие-ко-многим» представляет собой две связи типа «один-ко-многим». При этом базовая и подчинённая таблицы расположены со стороны «один», а вспомогательная таблица со стороны – «многие» (рисунок 4). Одной записи главной таблицы может соответствовать несколько записей подчинённой таблицы и наоборот. Уникальных ключей нет. Все ключи внешние. В этом случае таблицу, содержащую всевозможные комбинации базовых компонент, удобно нормализовать, используя инструмент Анализатор таблиц (Работа с базами данных /Анализ / Анализ таблиц, запускается мастер). На рисунке 4 показан этап нормализации таблицы Должностные совмещения на предприятии.

Таблица 4 – Должностные совмещения на предприятии

Код

ФИО

Дата Рождения

Таб Номер

Должность

Подразделение

Оклад

Тарифный Разряд

1

Иванов А.М.

10.12.1970

1230

Директор

Администрация

4500

8

2

Петров Н.И.

08.11.1975

1250

Менеджер по закупкам

Рабочий Персонал

4000

7

3

Сидоров О.П.

04.05.1977

1240

Менеджер по продажам

Рабочий Персонал

3500

6

4

Степанов А.М.

12.05.1981

1245

Менеджер по продажам

Рабочий Персонал

4000

7

5

Иванов А.М.

10.12.1970

1230

Менеджер по закупкам

Рабочий Персонал

4500

8

6

Сидоров О.П.

04.05.1977

1240

Менеджер по закупкам

Рабочий Персонал

4000

7

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

На рисунке 5 показано окно запроса на выборку сотрудников подразделения Рабочий персонал с тремя таблицами Сотрудники, Должности и Оклады. MS Access автоматически связывает таблицы, используя для этого параметры, заданные в окне Схема данных.

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

Рисунок 4 – Окно мастера анализа таблиц

Рисунок 5 – Создание связи на уровне запроса

Установив целостность данных, необходимо следовать следующим правилам:

  • Невозможно ввести в поле внешнего ключа связанной таблицы значение, не содержащееся в ключевом поле главной таблицы. Однако в поле внешнего ключа возможен ввод значений Null, показывающих, что записи не являются связанными. Например, нельзя сохранить запись, в таблице Должности без указания должности, но можно создать запись в таблице Сотрудники для вакансии на должность, которая пока не отнесена ни к одному из сотрудников, если ввести значение Null в поле ФИО.

  • Не допускается удаление записи из главной таблицы, если существуют связанные с ней записи в подчиненной таблице. Например, удаление записи из таблицы Должности, приведёт к удалению записей о сотрудниках из таблицы Сотрудники, имеющих данную должность.

  • Невозможно изменить значение первичного ключа в главной таблице, если существуют записи, связанные с данной записью. Например, невозможно изменить оклад сотрудника в таблице Сотрудники, если в таблице Оклады отсутствует устанавливаемое значение.